Linux Python 3

そろそろ Python を 3 に移行しようと思う。
はて、日本語はどうなるのだろう?
Linux ではまったく使っていなかったから解らない。

Gio Tips – L’Isola di Niente

多分組み込みの open() 関数はツジツマを合わせていると思う。
GIO での読み書きはどうなるやら、実験。

# Write and Length Check
s = '日本語'
f = open('test.txt', 'w')
f.write('{0}\n{1}'.format(len(s), s))
f.close()

# g_file_load_contents
from gi.repository import Gio
gfile = Gio.File.new_for_path('test.txt')
res = gfile.load_contents(None)
print(res)

# Streaming I/O
fstream = gfile.read(None)
dstream = Gio.DataInputStream.new(fstream)
print(dstream.read_line_utf8(None))
print(dstream.read_line_utf8(None))
fstream.close(None)

うん、文字列はシッカリ gunichar(UCS-4) だね。
やはり組み込み関数は仕事キッチリか。

g_file_load_contents だと、、、バイナリ扱いになってしまった。
読み込んでも UTF-8 のままで保持するということみたい。
文字列の読み書きに利用するなということなのだろう。

Streaming I/O では文字列自体は UCS-4 化するみたいだけど文字列長は UTF-8 バイナリでカウントしている。
試しに dstream.read_Line(None) に書き換えたら予想通り文字列がバイナリに。
GFileOutputStream は UCS-4 の文字列を普通に UTF-8 として書き込みできた。

うーん、やはり文字列が UCS-4 だと扱い辛いぞ。

GTK+ の GtkEntry の文字列はどうなるんだろう?

#!/usr/bin/env python3
#-*- coding:utf-8 -*-
 
from gi.repository import Gtk
 
class Win(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self)
        self.set_title('たいとるばぁ')
        self.connect('delete-event', Gtk.main_quit)
        self.entry = Gtk.Entry()
        button = Gtk.Button('保存')
        button.connect('clicked', self.on_clicked)
        vbox = Gtk.VBox()
        vbox.pack_start(self.entry, False, False, 0)
        vbox.pack_start(button, False, False, 0)
        self.add(vbox)
        self.show_all()
 
    def on_clicked(self, widget, data=None):
        f = open('gtk.txt', 'w')
        f.write(self.entry.get_text())
        f.close()
 
if __name__ == '__main__':
    w = Win()
    Gtk.main()

タイトルバー等の文字列も GtkEntry とのやりとりも UCS-4 の内部文字列のままでイケてしまうようである。
GIO で文字列を扱う場合以外は Python2 時と同様に使えると思ってよさそう。
なんて思っていたら落とし穴がありそうだが…

もう少し検証したいけど Boxes 上の Ubuntu では辛い。
「クリップボードを共有」を ON にしているのに何故かホストと共有できなくて面倒くさいぞコノヤロウ。
Fedora に入れたいけどデフォルトで使えるコードというポリシーに反するし。
18 にはデフォルトで入るみたいだが β すらまだ出ていない。

ちなみに本サイトのメール送信フォームを利用して文字列のやりとりというバカなことをやっていたりする、サイトを作っておくと便利だよ。

Ubuntu 12.10 Programming

せっかく Ubuntu 12.10 を仮想で導入したのでプログラミング環境等をチェック。

やったぜ、mono という巨大なゴミがデフォルトで入らなくなった!
と思ったけど 12.04 から既に無かったのか、気がつきもしなかった。
もしかして valac が…あるわけないか。

なんと Python 3 がデフォルトで入るようだ。
LXDE に変更したから入ったのかもしれないけど。

Python 3 からは pygtk はやっぱり使えません。
その他 Python 2 で提供されていた静的バインディングも当然全滅。
gi による動的バインディングなら問題ない。
一応書くと Python 2 も PyGtk も当然あるよと。

gcc はあるけど g++ は無いのは以前と同じ。
Gjs も Seed も無い、Ubuntu は JavaScript に消極的か。

Fedora なんかは Python に依存する体制から脱却しようとしているみたいだけど結局戻りそうな予感。
今の Linux では GLib 等の動的バインドに対応できるなら言語なんて何でもいいんだけど Python は標準ライブラリが絶妙だからね。

GTK+ のバージョンは…あれ? Nautilus や Totem のバージョンが 3.4 だ。
Gedit と eog は 3.6 って何だこれ。
まあつまり GTK+ は 3.6 であるということか、何故アプリはバラバラ?
Ubuntu って最新環境を最速で提供が売りではなかったのかな。

おかげで Nautilus にメニューバーがあるけどw
Nautilus 3.6 はかなり大胆に変更されているし、アプリケーションメニューに対応できなかっただけかもしれない。
GNOME は今後このメニュー主体になるわけで、GNOME を捨てたくせに GNOME の成果物に依存している Ubuntu の今後はいかに。

Gnome Files (aka Nautilus) 3.6 (3.5.92) Preview | Worldwide Edition – YouTube

しかし LXDE の設定には「ルックアンドフィールの設定」なんてのがあるけど Ubuntu ではまったく適用されない。
GTK2 はクリアルックス固定だし GTK3 に至っては Windows95 みたいだ。

元の Ubuntu が GTK2 と GTK3 を同じ見た目にするために標準を無視して特殊なことをしているからだろうけどカッチョワルイ。
Lubuntu ならこの辺りをなんとかしているのだろうか。
仮想だからいいけどホスト OS でこの環境を使いたくないないな。

というか LXDE 自体が GTK2 であるわけで。
この環境で GTK3 アプリを作ろうと思う人はいないだろうな。

GTK3 に移行したい人は素直に GNOME 3 を使いましょうということでしょう。
良さげならホスト化しようと思ったけどやっぱり次も Fedora にしよう。

GNOME Boxes part 3

前回の続き。

Boxes が勝手に名づける名前が長くて面倒なので変更してみる。

まず libvirtd プロセスが起動していたら終了させる。

仮想イメージ本体は下記ディレクトリにある。
~/.local/share/gnome-boxes/images

設定は以下の XML ファイル。
~/.libvirt/quem

コレを Ubuntu1210, Ubuntu1210.xml とリネーム。

そして XML の <name>, <source file> セクションを書き換える。

SELinux を無効化(又か…)

Boxes を起動、リネームされていることを確認。
ちなみに LXDE に変更済み、3D の Unity 重すぎる。
$ sudo apt-get install lxde
と以前と同じコマンドだけで入るよ。

Ubuntu1210 を起動、成功すると Ubuntu1210.log が作成される。
もう解るよね、またしても SELinux context を restorecon コマンドで変更する必要がある。

Ubuntu を終了、Boxes 自体も終了、libvirtd を殺す。

restorecon コマンドを行って SELinux を戻す。
おしまい、面倒くさいよ。

Boxes 自体の設定は
~/.config/gnome-boxes/sources/QEMU Session
のようだ、見事に超シンプルな本体の設定しか無いけど。

しかし何故ファイル名にスペースを入れるかなぁ…
スペースがあると右クリックメニューから GEdit で開く等ができないんだが。

********************

それにしても。

LXDE だとメモリ使用量たったコレだけかよ。
ワンテンポ遅れる感もまったくなくなったし、Unity って何だろうな。
仮想で使って Linux 使いのフリしているだけの輩を皆殺しにでもしたいのだろうか、自殺行為だと思うけど。

とにかく Boxes は予想していたよりずっと使えるようだ。
後はマウスホイールさえなんとかなればなぁ。

GNOME Boxes part 2

前回の続き。

色々試してみた。
どうやら動作が遅かったのはスワップが起こっていただけのようだ。
Boxes が勝手にメモリ量を決めておいていきなりスワップとは泣ける。

  <memory unit='KiB'>1048576</memory>
  <currentMemory unit='KiB'>1048576</currentMemory>
  <vcpu>2</vcpu>

と XML でメモリ量を倍にしたらかなりストレスは減った。
やはりワンテンポ遅れる感はあるけど Unity が原因かも…

ついでに CPU を 2 つに指定したけどあまり意味が無かった。
4 コア中の 2 つを使うのではなく単にエミュレーションで 2 つあるように見せかけているだけみたい。
無限ループのコードをうっかり書いてしまった時の保険にはなるな。

XML の書き換えを反映するにはホストの Fedora を再起動。
何かのサービスを restart させればいいと思うけど解らなかったので強行手段。

それと一番困った SELinux のブロックは通知ブラウザーのトラブルシュートでアッサリ解決。

$ sudo restorecon -v "/home/sasakima-nao/.libvirt/qemu/log/Ubuntu Precise Pangolin LTS.log"

にて Enforcing のまま起動できた。

ついでに virt-manager というアプリを入れてみたけどまったく関係ないようだ。
GUI で設定を弄くれるアプリがあると思うのだが今は解らない。

仮想マシンの立ち上げはシングルクリックで良かった…

これで後は 1920×1080 にできないこと以外は問題無くなった。
ということで Ubuntu 12.10 は Boxes でいこうと思う。

Windows 8 も出たし安いしで入れてみたいなと思い電気屋に見に行った。
MS ゴシックのガタガタなフォントのままであるのを見て買う気分が一騎に失せた。
無償で使える Linux に劣るのフォントを何時まで使うのつもりだ…
これ Windows しか使えない人は気がつかないみたいね。

********************

とにかく 12.10 だ。

日本語 remix の ISO を落とす。
ISO のままだと余計に面倒くさいので素直に DVD-R を焼いてみた。

まず ISO を焼いた DVD-R を入れる、USB 接続の外部でもイケる。
というか内蔵の奴が壊れているのでミニノート用のを使っただけだが…

SELinux を無効化します sudo setenforce 0

Boxes を起動、「新規」「続行する(O)」とボタンを押す。

ISO を勝手に認識するので選ぶ。

するとフルスクリーンになってインストールが始まる。
解像度はディスプレイと一致しないので注意。
ウインドウ化したい場合は右上の右から二番目ボタンで。

終わったら DVD-R が出て…こなかった。
ボタンで DVD-R を出して virsh コマンドで強制終了させた。

virsh destroy "ubuntu-ja-12.10-desktop-i386.iso 2"

SELinux を元に戻すのを忘れないようにと。

どうせこのまま起動するとスワップが起こるので上記を行ってホストの再起動。
メモリがコッチは 512000kb になっていたので 1024000kb に指定と。
cdrom を取り出しても記憶してしまうようなのでセクションを消して。
sudo restorecon -v “/home/sasakima-nao/.libvirt/qemu/log/ubuntu-ja-12.10-desktop-i386.iso 2.log”

12.10 は Unity 2D が無くなったのか…
なんと 3D で仮想環境が立ち上がった、おかげで超激重!
ウインドウの立ち上げやメニューがスローモーション、駄目だ使えネェwww
立ち上げているだけで CPU ファンが超ウルセェwww

今は実験と確認用途だからいいのだが、LXDE にでも変えるか…
Unity を使ってほしいなら 2D を残せよ。

1024000kb でもスワップしているし、おまえは Vista カヨ!
1536000kb に変更してやっとスワップ地獄から開放された。

この工程で気がついたけど libvirtd プロセスを一旦殺せば XML の指定を反映できる。
Boxes を立ち上げれば自分で殺すまで残りつづけるようだ。

何故か 12.10 では 1920×1080 の指定があった。
ドライバーの違いかな、これならフルスクリーンでもイケるね。
何にせよ別途でドライバー等が不要な仮想環境は嬉しいね。

********************

/usr/lib/girepository-1.0
で ls してみる

Gst-1.0 は無かった…
ぶっちゃけコレの確認のためにだけ入れたんだが。

GNOME Boxes

そろそろ次期 Fedora を入れる準備をしておかねば。
Ubuntu はもう出ているね、GStreamer が 1.0 になっているか試したい。
その前に GNOME 3.6 のリリースノートでも見るか。

GNOME 3.6 リリースノート

Nautilus までメニューバーが無くなってしまうようで。
うーん微妙だ、拡張スクリプトが使い辛くなると困るんだが。

GStreamer は 0.10 と 1.0 の共存になるという解釈でいいのかな。
でなきゃ困るが。

Boxes

これが気になる。
KVM の単なるフロントエンドみたいだが GNOME に統合されたなら突然無くなる恐れは少ない。
とはいえ Seed さえ止まっているんだよな…

GNOME Boxes – YouTube

Aero もイケるようだね、エミュレートだから劇重だろうけど…
KVM も初期の笑っちゃうほど不安定な頃のしか試していないし現状は使えるレベルになったかどうか試してみたいところだ。
Fedora 17 も「追加と削除」から入れられるし試してみるべ。

仮想環境はコレのみチェックで揃うようだ。
起動、恐るべきシンプルな外観で逆に戸惑うよ。
終了ボタンすら無い、アプリケーションメニューから
と思ったけどマウスで上部を掴んで引いたらウインドウ化できた。

とにかく早速 Ubuntu 12.04 の ISO を試しに入れてみる。

インストールは SELinux にブロックされる。
sudo setenforce 0
で Permissive に切り替えして
終わったら sudo setenforce 1 で SELinux を Enforcing に戻す。
(getenforce コマンドで確認できます)

なんかディスク容量や割り当てメモリは勝手に決められてしまったのだが。

ご存知だと思うけど Ubuntu はインストール後に CD が自動で出てくる。
ISO からのインストールでは強制終了して ISO を取り除く必要がある。

~/.libvirt/qemu/hoge.xml

を開いて <disk type=’file’ device=’cdrom’> の項目を消せばイケた。
XML なので <!– –> のコメントアウトでもいいみたい。

この hoge 部の名前は virsh list –all コマンドで調べる。
第5回 KVM仮想マシンの操作:KVMで始めるプライベート・クラウドへの第一歩|gihyo.jp … 技術評論社

$ virsh list         起動中の仮想マシンを一覧表示
$ virsh list --all      停止中の仮想マシンを含めて一覧表示
$ virsh start hoge   仮想マシンを起動
$ virsh shutdown hoge  仮想マシンをシャットダウン
$ virsh destroy hoge  仮想マシンを強制停止

sudo は必要無いみたい。

Ubuntu Precise Pangolin LTS という名前が勝手に私には付いていた。
長すぎ、変更する方法はあるのかな?

ここまでやれば後は Boxes 上から W クリックで起動できる。
Unity 2D で起動しないとフリーズするようだ。

なんじゃコリャ!
2560×1600 って何でデフォルトがこんな解像度になるんじゃい。
しかも一番多いだろう 1920×1080 指定が無い、なんてことかしら。

設定画面のディスプレイから「ゲストをリサイズ」をオフにすれば指定解像度以上にはなるけど以下にはならないようだ。
これを利用してウインドウ状態で使うしかなさそうだな。

あぁやっと使える状態になった。
ということで少し試す。

マウス統合がデフォで切り替えもスムース。
以前は暴走したりマウスカーソル位置が変だったが何ともない。
でもウインドウ一つ動かすのもガックガク。
アプリの起動が死ぬほど遅い。
文字入力の反映でさえもワンテンポ遅れる。
マウスホイールが使えないみたいなんだけど。

GUI を使うにはまだ厳しいのかな…
つーか SELinux が Permissive でないと起動できないヤン!
うー、あんまりオフにしたくないなぁ…

VirtualBox や VMWare は本当によくできているもんだ。
とりあえずもう少し試してみる。
問題なさそうなら 12.10 もコイツに入れてみたい。

続き