Lubuntu 13.10 GStreamer and cairo

Lubuntu で PyGI から GStreamer を使うには

Ubuntu ? パッケージのファイル一覧: gir1.2-gstreamer-1.0/quantal/amd64
Ubuntu ? パッケージのファイル一覧: gir1.2-gst-plugins-base-1.0/raring/amd64

を Synaptic から導入すればいい。

lubuntu_gst_and_gstaudio

と思ったけど Python3 から利用すると cairo 関連パッケージが足りない。
コードで利用していなくても PyGI が利用するのでエラーになる。
というか Python2 でも足りないので cairo での描写ができないんですけど…

もう Canonical が Python3 に移行しろと言っているので Python2 は無視して。

python3-cairo
python3-gi-cairo
libpython3.3

も必要、この 3 つがないと cairo で何も描写できない。
線や図形の描写 – L’Isola di Niente

lubuntu_cairo

んで肝心の GStreamer デコーダー(プラグイン)はインストール時に
「サードパーティーうんたら」のチェックで全部入るはずなんだが
libav, bad, base, ugly があるのに何故か good が無い。

gstreamer1.0-plugins-good (gstreamer1.0-x が依存で入る)

も必要、一番肝心なプラグインが無いってどうよ。
コレが無くても PCManFM や MPlayer では問題ないんですけどね。
Nautilus や Totem が GStreamer を使う素の Ubuntu はキチンと入るのか?

これで Lubuntu 13.10 にて Python から cairo, GStreamer を使う環境完成。
皆軽さで LXDE を選んでいるはずだから最小限にしたいですよね。
アプリの依存関係で既に入っている場合もあるよと一応。

urusai

何故かソケットエラーが出るけど再生自体は問題なく可能。
2D 描写しかできない Lubuntu でもなんとか開発はできそう。

#############################################

それと LXDE 等の GTK2 ベースデスクトップだと
/usr/share/pixmaps
にアイコンを入れないとインストールで認識しないのねん。
忘れていた、うーんどうしよう。

Lubuntu 13.10

Ubuntu 13.10 が出ている。
自アプリ動作確認メンドクセエ、このためだけに毎回落とすのはもう疲れた。

いや Lubuntu があるじゃないか。

3D 合成処理は無いけどモバイル用途なら最強のはず。
今まで素の Ubuntu から変更しか行ったことが無かったけど直接導入するとどんな感じか実験。
あ、マシンは Core2 Duo P8700 の少し古いノートです。

Lubuntu/GetLubuntu – Community Ubuntu Documentation

x86_64 版を落し CD-R に焼いてとっととインストール。
いきなりインストールでも無線 LAN 接続はできるので慌てない。
Ubuntu はちゃんとインストール CD が終了時に出てくるのが嬉しい。
というか素の Ubuntu と同じだった。

さて再起動、やっぱり何もかもが軽い。
というかアホみたいに早い、起動も早いし修了はマジで一瞬。
Alt+F1, Alt+F2 で普通に保管してくれる、こうでなきゃ。
こんなに早かったかな?

スクリーンショットアプリが無いので gnome-screenshot だけ導入。
残念だったのが Chromiumu が狐に変わっていたこと、後で Chrome 入れるか。

軽いだけじゃ使えない、スマホやデジカメを USB 接続してみる。

pcmanfm2

ftp://USERNAME@SERVERNAME/DIRECTORY

で FTP もできる、なんだ PCManFM でも可能だったのか。

何もインストールしていないのに、今の Linux スゲェ。
これができれば一般的なモバイル用途は充分だと思う。

しかし日本語入力切り替えが少しおかしい。
Zenkaku_Hankaku で Japanese との切り替えができない。
Anthy に切り替えれば Anthy 内部で切り替わるけどトレイアイコンが変わらない。

Super+Space で切り替えすればいいのだけど一般人には勧められないな。
デスクトップの Fedora で英語キーボードを使っている筆者は気にならないけど。
というか全角半角キーの存在を忘れていてしばらく気が付かなかったwww

Ubuntu 13.10のインストールとインストール直後のシステム設定 | Ubuntuアプリのいいところ

元の Ubuntu でも同じっぽい、トレイアイコンは変わるのかな?
しかし Ubuntu は IBus かな漢字(ibus-kkc)にはならなかったか。
[全角]の変換すらできない寒い辞書だものね、Fedora 19 最大の苦痛。

しかし Unity をカスタムするなら最初から Lubuntu にすればいいのに。
スクロールバーやメニューバーの糞仕様もどうせ気になるんだから。

ところで。

non_gst

Gst-1.0.typelib が Lubuntu では存在しない。
インストール時の「サードパーティうんたら」はいったい何だったのだ。
とにかくこれじゃ Y901x が動かないよ、Totem を導入すればいいのかな?
元の Ubuntu は存在すると思うけど、後で調べる。
しかし typelib がえらく少ないな、何故か Unity があるのは笑うところ。

gtk_version

ついでに GTK+ のバージョンを調べると 3.8.4 って。
Fedora 19 は既に 3.8.5 なんですけど、最新 GTK+ って 3.10 だったはず。

第293回 Ubuntu GNOME 13.10の変更点:Ubuntu Weekly Recipe|gihyo.jp … 技術評論社

おいおい…

GNOME 3.10 リリースノート
開発者、システム管理者、ディストリビューター向けの新規事項

GtkListBox とか GtkHeaderBar とか楽しみなんだが。
しかしこのヘッダーバーは GNOME 以外はどうやって表現するのだろう?
だから 13.10 は古いのを使っているっぽい。

最新なのに一世代前の Fedora より古いって何よ…
なんかもう自アプリサポートは Fedora だけでいいや。

他に気が付いたことがあったら後日。

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

おまけ

celeron su2300 の Windows7 マシンに入れたら今回も起動できない。
Fedora なら余裕でデュアルブート可能なのに、何故こんなのがシェア No.1 なのやら。
マスターブートレコードを戻すついでに、以下を見つけたので試してみた。
Windows 7 SP1 の古い Windows の更新プログラムを削除できるようにディスク クリーンアップ ウィザード アドオン

winupdate

6GB って、もう Windows はもぅマヂ無理。。。

Python3 convert

Python3 に移行して随分たったが今頃気がつく。
コレ (cp932 to utf-8) ができない!
g_convert | PaePoi

GLib.convert() 関数の第一引数は gchar* なので cp932 の文字列を渡す必要がある。
Python3 では当然 bytes(b’…’) である。
そのまま指定するとバイト配列なくて文字列にしなさいというエラーになる。

#!/usr/bin/env python3

"""
    ConvertError: Must be string, not bytes
"""

import sys
from gi.repository import GLib

try:
    result, contents = GLib.file_get_contents(sys.argv[1])
    if result:
        try:
            text, bytes_read, bytes_written = GLib.convert(contents, len(contents), "UTF-8", "CP932")
            print(text)
        except Exception as e:
            print("ConvertError: {0}".format(e))
except Exception as e:
    print("FileError: {0}".format(e))

python3_g_convert

Python2 だと bytes と str って実は同じものだから問題ないのだけど。
Python3 では文字列に変換っっって何だそれ、cp932 だぞおい。

Python3 の文字列が UCS-4 になった弊害がこんなところに…
いや pygobject が今後対応してくれるかもしれないけど。

あれこれ試してみたけど現状 GLib や Gio では対処できないようだ。
しかたがないので Python 組み込みの decode() を使ってみる。

#!/usr/bin/env python3

import sys
from gi.repository import GLib

"""
    f = open(sys.argv[1], encoding="cp932")
    print(f.read())
    f.close()
"""

try:
    result, contents = GLib.file_get_contents(sys.argv[1])
    if result:
        try:
            str932 = contents.decode("cp932")
            print(str932)
        except Exception as e:
            print("ConvertError: {0}".format(e))
except Exception as e:
    print("FileError: {0}".format(e))

g_convert を使うより圧倒的に簡単なコードになってしまった。
というか組み込みの open() なら更に簡単だったり。

Vala からも参考にできるよう今までやってきたつもりだけど、もう無理。
しかし Vala の string が gchar* のままなのは本当に正解だよね。

GtkCellRendererAccel

GtkCellRendererAccel がいったい何なのか解らなかった。
海外をいくら検索してもサンプルコードが無いどころか devhelp 丸写しのみ。
そんなこんなで詰まって覚書ページ作成が止まっていたり…

ココにすらないし、避けている?
12. CellRenderers ? Python GTK+ 3 Tutorial 3.4 documentation

ウイジェット名からコラムにフォーカスを当てるキーボードアクセラレータかなと。
コラムは列なので行を選択する GtkTreeView ではまったくの無意味だし。
いったいこのレンダラの正体は何かと考えてはや半年。

何故か今日テキトーに試していたらやっと理解。
覚書ページのほうに書いたのでサンプルコードはソチラで。
レンダラ – L’Isola di Niente

つまり

gtkcellrendereraccel

この部分ってソレ専用のレンダラだった。
キーボードアクセラレータの設定及び確認以外の使い道が何もないwww

とはいえコモンダイアログなんかも皆同じものを使っているわけで。
操作性に統一感を出そうとする GNOME なら当然の選択だったのかも。
と思ったけどよく見ると GTK+ 2.1 の頃にはすでにあったのか。
何故サンプルコードがどこにも無いのだ?

やっとココを突破できたので少しは追記が進みそうです。
バイク乗りにしかわかんないネタになってきたけど、まどかネタ飽きた。

bash custom prompt $PS1

今頃知ったけど、bash のプロンプト文字列は変更できるようだ。
Fedora と Ubuntu で表示が違うのは単に変数の内容が違うだけだった。

How to: Change / Setup bash custom prompt (PS1)

早速 $PS1 の値を確認してみよう。

ubuntu_bash

$ echo $PS1

# Fedora Output
"[\u@\h \W]\$ "
# Ubuntu Output
"\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$ "

Ubuntu はナンジャコリャだけど、\[\] で囲んだ内容は非表示属性のようだが。
echo $debian_chroot
は何も定義されていないみたいだし、Ubuntu では su は使えないし。
\u@\h:\w\$ だけでいいような?

ということで。
PS1 変数に指定子や記号を代入すればその値で表示されるようだ。
あの長ったらしくて困る Ubuntu のプロンプトを変更したかったので嬉しい。

\w を \W に変更するだけでいいようだが私的理由で Fedora と同じにする。
端末内で行ってもそのプロセス以外では反映されないので ~/.bashrc に指定。

bashrc

これで深い階層で端末を利用してもイラッとしなくなる。
現在位置の確認は pwd コマンドで充分、Fedora でそうしている。
もっと短くしたいなら \h のホスト名を消すという技もあるね。

本当は Windows の cmd.exe でこうしたいんだけど…

A better PROMPT for CMD.EXE or Cool Prompt Environment Variables and a nice transparent multi-prompt – Scott Hanselman

ロクなことできないなぁやっぱり。
そもそもホームをチルダ表示にできないから無意味だが。
PowerShell はチルダで cd 異動が可能なのに何故チルダにしなかったのか?

コマンドラインを強化せよ! – Windows 7のコマンドプロンプトをカスタマイズする (5) エイリアス機能でコマンドプロンプトを使いやすくする | マイナビニュース

コマンドはコレで似せることができるけど面倒臭いにもほどがある。
やっぱり Windows は糞だよ、Linux 慣れしすぎともいうが。