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

てんしん

sum とは言うまでもなく「合計」の意味である。
dim sum の意味が「点心」って、、、、、天津ではなくて?

tensin

Dim sum – Wikipedia, the free encyclopedia

プログラマーのみが笑えるネタおしまい。
こんなエントリさえもググなんとかさんは拾ってしまうかの実験を兼ねて。
いや、Mandriva ネタのアクセス解析が予想どうりだったので、というのは内緒だよ。

お知らせ – Mandriva Linux 製品取扱終了のお知らせ – SIDfm

需要ネェ…

Mandriva GNOME 版で Qt3 アプリのメニュー

Mandriva 2010.0 GNOME 版で Opera を使うとメニューがおかしい。
メニューがボタンのようになっていてクリックしないとサブメニューが出ない。
Opera は Qt3 製だ、これは qtconfig を使って設定を変更するしかなさそうだ。
しかしソフトウエア管理からは Qt4 用しか見つからない。

conf01

qtconfig_qt4

/usr/lib/qt4/bin/qtconfig

に入る、インストールして端末から qtconfig を実行するとコレが起動する。
ちなみに設定ファイルは以下

~/.config/Trollteck.conf

実は Opera を入れると Qt3 用 qtconfig は入るようだ。

/usr/lib/qt3/bin/qtconfig

を実行すれば Qt3 用 qtconfig が起動できる、設定は以下のようだ。

~/.qt/qtrc

qtconfig_qt3

デフォルトでは GUI Style が Motif になっている。
コレを Windows に変更、てか KDE 版は Windows になっている。
これでメニューがボタンみたいで使いにくい不満は解決できる。

mandriva_opera_menu

でも Opera は大半が独自描写なのでメニューくらいしかコレで変更できない…

日本語入力ができなくなる場合があるのは Ubuntu で使っていた時と同じか。
一度右クリックメニューを出してしまえば入力できるようになるんだが何故だろう。
コレで XIM Input Style を変更しても同じ結果、KDE 版でさえ同じ結果なのよね。

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 にしたほうがいいのだろうか?需要はシラネ。