Linux」カテゴリーアーカイブ

Linux Opera Starting Check in ps command

せっかく Y901x を Mandriva KDE に対応させたのだから SeeMe もやりたい。
問題は Python の wnck モジュールだ、KDE 版にはデフォルトで入っていない。

seeme102_kde

動画プレイヤーならともかくコイツはモジュールを入れてくれにしたくない。

基本的に私は得に何もインストールさせないで使えるものを作るのがポリシー。
Windows で .NET は IronPython しかやらなくなったのはそのポリシーから。
だって 7 や Vista なら .NET 自体は最初からあるし SDK もコンパイラも必要無い。

ということで wnck を使わずに Opera が起動しているかどうか判別する方法は…

まてよ、Linux は Windows とは違ってコマンドライン OS に GUI が被さっているだけだ。
Window を探して名前を調べなくてもコマンドからチェックできるんじゃないの?
探せば他も見つかるだろうけど単純に ps コマンドの出力から調べられるかも。

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

"""
    opera_init_check.py
    Find in "ps ax" command output
"""

import commands

r = commands.getoutput("ps ax")
if "/usr/lib/opera/opera" in r:
    print "starting Opera"
else:
    print "not starting Opera"

こんな手抜きバリバリなコードでアッサリ判別できてしまった。
Linux は多分この位置にしか Opera 本体が入らないだろうからイケそうだ。
Windows 的な考え方がまだ抜けていないみたいだな私は。

この判別方法に書き換えて VirtualBox 上の KDE 版で動かしてみよう。

seeme103_kde

問題なく起動できるようになった、Opera の起動判別もバッチリ。

ということでバグ修正を含めて SeeMe for Linux 1.0.3 公開。
ただダウンロード数が強烈に寂しいんだがコイツ…

Mandriva にテスト用 Ubuntu 導入

Mandriva One 2010.0 GNOME 版を利用している。
VirtualBox をインストールしてその上に One 2010.0 KDE 版も入れている。

2009.1 の時と違い VirtualBox 上でもしっかりマウスホイールが効く。
今回も GuestAdditions が勝手に入り有効になるのでインストールだけで即マウス統合。
Mandriva on Mandriva なので相性もバッチリのようだ。

なので KDE で使いたい時は Host(右Ctrl)+F でフルスクリーンにするだけで KDE 版に早変わり。
Free 版をログアウトで切り替えするよりこういう使い方のほうが私には合っている。
だって私は KDE は実験でしか使わないので、KDE が本場のディストリだと解っているけど。
とにかく VirtualBox って本当に便利なアプリケーションです。

ということで。

Y901x は Ubuntu 9.10 でどうなのか試さにゃ、Ubuntu 用なんて書いて公開してんだから。
作った本人は Mandriva で動けばいいのだが、シブシブダウンロード。
VirtualBox 上にインストール、インストール中に出る自己宣伝が超ウザッ!

ubuntu_nautilus

Windows のマネ?いきなりコレで引いたが軽くアプリを使ってみる。
日本語 Remix でもないのにキチンと日本語表示できるし Anthy も入っている。
ネット上の評判ほどは酷くないのかな。

てか毎度のように 800×600 以上の大きさにならない。
Mandrina であれば GuestAdditions が勝手に入るが Ubuntu はそうはいかない。
GuestAdditions をコンパイルするために gcc をまず…
って入っているじゃん、/usr/src にヘッダも揃っている。

Mandriva でさえ初期状態で gcc は入っていないのにどういう心境の変化?
もしかして仮想マシン上で動かす人ばかりだったのでこうしたというオチかも。
Linux なんて世間ではそんなもんさ…
まあとにかく GuestAdditions 導入をしてとっとと Y901x の動作を調べる。

y901x0110

あーあ、やっぱり Mandriva とまったく同じ症状か、対策した Beta しか動かない。
Mandriva がおかしいわけではなく GNOME てか GTK+ の仕様が変わったのね。
これで Mandriva 上でデバッグすれば Ubuntu にも対応できると解った。

pyc

しかし Ubuntu では当然のように *.pyc キャッシュを作成してくれた。
Python バージョンは同じ 2.6.4 だから Mandriva は環境設定が他と違うのだろうか?

てか Ubuntu 9.10 って…このスクリプトアイコン何? GNOME 標準を変えないでくれよ。
Linux 臭さを消そうと努力しているんだろうけど Linux 好きには逆効果だと思う。

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 は普通に認証通ったよ、何時スナップショットを取ろうかな?