Mandriva」タグアーカイブ

get the X Window ID from gtk.Drawingarea

私は Y901x という GStreamer フロントエンドな動画プレイヤーを作った。
もちろん自分で使っているのだが Mandriva 2010.0 に乗り換えたら落ちまくる。
でもタマに問題なく動く場合もがあるからややこしい。

ついでに、ソースディレクトリに pyc キャッシュを作成しなくなっているのだが…
Mandriva 2010.0 だからなのか? Python がヤメたのか?それとも他の場所にあるのか?

0.1.9 を色々弄くって以下の処理を行っている場所
GtkDrawingArea の X Window ID を得ようとすると X server Error になると解った。

imagesink.set_xwindow_id(self.video_window.window.xid)
# これさえも error
print self.video_window.window.xid

gtk.DrawingArea.window は gtk.gdk.Window であり gtk.gdk.Drawable のメソッドを持つ。
なので xid アトリビュートで X Window ID が得られるようになっている。

コレが現行の GTK+ ではできなくなったのかな?
と疑って xwininfo をインストールして使ってみた。

xwininfo

何も問題無く root window の xid が得られている。
それなら root な gtk.Window.window に割り当てたらどうなる?

imagesink.set_xwindow_id(self.w.window.xid)
#imagesink.set_xwindow_id(self.video_window.window.xid)

fullwindow

コントローラやメニューが塗りつぶされたけどコレなら問題無く xid が指定できる。
ということは gtk.DrawingArea の window.xid の取得方法がマズイということだろう。
ならば簡易なコードを書いて試してみる。

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import pygtk
pygtk.require('2.0')
import gtk

class Xid():
    def __init__(self):
        w = gtk.Window()
        vbox = gtk.VBox()
        self.da = gtk.DrawingArea()
        button = gtk.Button("Press me")
        button.connect("clicked", self.show_xid)
        vbox.pack_start(button)
        vbox.pack_start(self.da)
        w.add(vbox)
        w.set_title("xid")
        w.connect("delete-event", gtk.main_quit)
        w.show_all()

    def show_xid(self, widget):
        widget.set_label("gtk.DrawingArea xid: %s" % (self.da.window.xid))

if __name__ == '__main__':
    w = Xid()
    gtk.main()

あらら、この方法では問題無く取得できてしまった。
ということはタイミングが問題なのか、何か event が起こった時に取得すればイケそうだ。
ということで検索しまくった、日本語で見つかるはずがないのでやはりメリケンの Google で。

Re: [pygtk] get the XID from gtk.Drawingarea

expose-event を吐いた所で xid を保存してソレをブチ込めばいいということかな?
でも expose-event を待つ必要があるので __init__ で sys.argv を処理できない。
show シグナルにて sys.argv を処理するように書き換えて実験。
コードの解説は長くなりすぎるからバックアップを見てくれで済ます。

y901x-0.1.10beta.tar.gz

kkobato

あぁやっと Ubuntu 9.04 で使っていた頃のように Mandriva で動くようになった。
GTK+ が厳密になったのか Ubuntu がいいかげんだったのかは今は解らない。
ところで Mandriva でも Ubuntu と同じインストールスクリプトが使えるね。

もうしばらく自分で試してから本サイトの奴は更新します。
Ubuntu 9.10 でも試さなきゃなぁ、多分同じだと思うけど…
てか RPM にしたほうがいいのだろうか?需要はシラネ。

Mandriva 2010 Japanese Font Setting

Mandriva One GNOME 2010.0 日本語版のデフォルトフォントは以下になっている。

Suns : UmePlus P Gothic
Monospace : DejaVu Sans Mono Book

Monospace 自体はこれでいいけど少々横長なのでテキストエディタでは使い憎い。
UmePlus Gothic にしたいけど何故かアルファベットが少々汚くみえる。
そういえば 2009.1 One KDE 版を試していた時のコレを思い出した。

ぱぇぽぃ2 ? Blog Archive ? Linux Opera 10 文字入力問題の解決

lcd_s

サブピクセルのスムージング(LCDs)
にチェックするだけで詳細ボタンを押した時の設定が上記と同じになるようだ。
GNOME は KDE よりかなり単純化されているんだね。

Gedit 上の UmePlus Gothic も綺麗に見えて Nautilus のファイル名も見やすくなった。
コレだけで液晶ディスプレイに最適な表示になるようです、CRT の人なんてまだいるかな?

これだけでは Qt4 製 VirtualBox や KeepassX のフォントにはアンチエイリアスが掛からない。
Opera は Qt3 製であるためか問題無い、VirtualBox が Qt 製だと今頃知った私であった。

VirtualBox に One 2010.0 KDE 版を入れて Qt4 のフォントはドコを見ているか調べてみる。
どうやらホームの .fonts.conf ファイルを見ているようだ。

<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
 <match target="font" >
  <edit mode="assign" name="rgba" >
   <const>rgb</const>
  </edit>
 </match>
 <match target="font" >
  <edit mode="assign" name="hinting" >
   <bool>false</bool>
  </edit>
 </match>
 <match target="font" >
  <edit mode="assign" name="hintstyle" >
   <const>hintnone</const>
  </edit>
 </match>
 <match target="font" >
  <edit mode="assign" name="antialias" >
   <bool>true</bool>
  </edit>
 </match>
</fontconfig>

という XML を書きホームディレクトリに「 .fonts.conf 」という名前で置いてみる。
それだけで Qt4 アプリケーションのフォントは全部綺麗になった。

fonts_conf

PNG 画像にするとアンチエイリアスが掛かるからスクリーンショットは意味無いかも。
とにかくこれで GNOME 版でも Qt4 アプリのフォントにガッカリしなくてよくなる。
KDE 版は GTK+ アプリにも設定で全部適用してくれるのに困ったものだ。

おまけ、何故か今まで気がつかなかった。
Compiz 有効状態で Alt+F1 にてメインメニューが開かない、当然 Alt+F3〜F7 もダメ。
これは CompizConfig 設定マネージャを開いて

gnome_key

とチェック、PrintScreen キーもこれをしないと使えない。
こんなのはデフォルトで有効にしておいてくれよ…

Mandriva 2010 GStreamer Check

DeskTop Linux を Mandriva に乗り換え快適な毎日である。
しかし自作動画プレイヤー Y901x が落ちまくって使えないのは困った。
コイツの操作性に慣れきってしまったのよ、自分が作ったのだから当然。

VirtualBox 上だったとはいえ 2009.1 では Y901x は問題無かったはずなのに。
SeeMe for Linux は我ながら完璧だ、32bit 限定での話だが。
怪しそうなものを考えてみる。

Mandriva のセキュリティ関連が邪魔をしているのか?
GNOME や GTK+ のバージョンが上がったせいなのか?
それとも GStreamer 自体のバージョンのせいなのか?

OS のバージョンアップで以前のアプリが動かなくなるなんて当たり前の話だからね。
過去の資産?はぁ…ドキュメントを読めない人ですかアナタ、漢字文化圏用も用意したのに。
と、Microsoft は強気でいても全然構わないと私的には思うんですけど。
でなきゃ以後の Windows の進化にまで影響が出てしまう…
Windows 7 はその点だけは残らず褒めろ、コイツの開発者達は恐るべき執念、以上脱線。

ということで。
複雑(でもないが)な Y901x では解らないので以前自分で書いたコ以下のコードで試す。
複雑でもないというのはベースである Windows 版 Y901 はトンデモネェ程複雑だから。
自身で何故こうなっているかワカンネェ、だから Cinema は超単純化…まぁそれは関係なくて。

動画プレイヤーを作る

やっぱり動かない…

bus.enable_sync_message_emission()
imagesink.set_xwindow_id(self[“drawingarea1”].window.xid)

のどちらかをコメントアウトすると別個ウインドウになって普通に動く。
つか enable_sync_message_emission ってそういうことだったのね。
知らないで以下のコードをまるまるコピペしたよ。

2. Playbin

そういえば Mandriva の GStreamer のバージョンは何?

gst_ver

0.10.25 なのか、超最新版じゃないの。

GStreamer: open source multimedia framework

むーどうやらこの辺が怪しいな。
もう少し調べてみます。

で。

seiki

Vista は普通に認証通ったよ、何時スナップショットを取ろうかな?

Mandriva 2010 で AAC

Totem てか GStreamer で AAC が再生できない件。
apple lossless や mpc なんて使っている人がいるか怪しいのも再生できないらしい。

いや、ライセンスについてはソフト作者なので嫌というほど知っているんだが…
mp3 も一応ライセンスが付いているのに再生できるとか一貫していないかも…
それより Ubuntu では普通に再生できるのにいきなりデコーダーを買えでは…

ということで。
PLF リポジトリを追加すればこれらのエンコード及びデコードが可能になるようだ。
RPM Fusion や Medibuntu と同じライセンス逃げ用途な非公式リポジトリなのね。

Easy Urpmi

easy_urpmi

にて 2010.0 と i586 を選択、私はこうだけど自身の環境に合わせてね。
そのまま Add PLF medias をクリックで良いようだが慎重な人用にコマンドで行う方法を。
そして「Refresh commands」をクリックするとリロードされて直上のコマンドが変わる。
書き換えられたコマンドを端末で root になって Ctrl+Shift+V で一行づつコピペ。

command

でソフトウエア管理に PLF 関連が追加されるので AAC 等を選択。

plf

これで少なくとも YouTube 等から拾った MPEG-4 は音が出る、ダイアログも出なくなる。
ぶっちゃけエンコードに関してはアプリが充実している Windows の利用を一応勧めておくよ。

私的なことを書くと後は我が Y901x が落ちまくるのをなんとかせねば…
エラー内容を見ても何が悪いのか全然ワカンネ、Ubuntu 9.10 でも同じなのだろうか?

ところで。
新しいバージョンの Mandriva がリリースされました
とお知らせが出たので詳細情報ボタンを押した。

20091

あのぉ、コレ 2010.0 GNOME 版なんですけど。

Ubuntu って重かったんだね

Windows 7 もイイけどやはり Linux てか GNOME はもっとイイ。

Mandriva GNOME 版を選んで良かった、とにかく何もかもが軽い。
Ubuntu 9.04 の時より少し起動が遅いが、とにかく GUI アプリの起動が早い。

何もかもサクッと起動する、得に標準画像ビューアの起動速度の差には呆れた。
Ubuntu しか使い込んだ Linux が無かったのでアレが普通だと思っていたよ。

何より ATI マシンで安心して fglrx が使える(自動で入る)からアクセラレータが効く。
Opera でも Firefox でも Flash サイト観覧に躊躇しなくてよくなったのは嬉しい。

さて環境構築の続き。
やはり色々とインストールするのをやはり忘れていた。

Sylpheed
VirtualBox
GStreamer codec
samba

VirtualBox 上に Vista を入れてその中に Visual Studio 2008 を入れるわけだが。
どう考えてもその作業だけで半日以上掛かるので休日にしかできないわい。

先日書いた動画 codec 導入であるが…

codec_buy

おいおい、ユーロでデコーダーを買ってくれってことか。
素直に GStreamer codec を入れることにしよう。

gstreamer0.10-decoders にだけチェックすれば他も自動でチェックされる。
それだけで大半の codec は入る、rm も mov も再生でき Nautilus でサムネイル可能。
ちなみに音声が aac だと又あのダイアログが出る、どうしよう…

んで、samba で Windows 7 マシンとファイル共有をしようとした。
Ubuntu の時は Windows 7 側からしかアクセスできなかったがどうだ?
結果 Mandriva からも Windows 7 側からもアクセスできない、どうやればいいのだ?
ドメインに参加すれば上手くいくと思うけど Home Premium だし…

それと Ubuntu 入りの HDD を SATA スレーブ接続してファイルの一揆コピー。
しようとしたんだけど HDD が root 所有になって何もコピーできない…

しかたがないから root でログイン、背景が真っ赤になってなんともいえん。
コピー後に自分でログインしなおして su で root になって chown で所有者変更。
でなんとか自分所有になった、凄く面倒なんだけど他の Linux でもこうなのかな?

商用 Linux ベースなだけあって色々とセキュリティ関連が面倒そう。
それは Windows 7 にも言えるわけで、はたしてネットワークは繋がるのかな…