Ruby/Qte普及委員会 FAQ

XREAAD
Create  Edit  Diff  FrontPage  Index  Search  Changes  History  RSS  Login

ご質問はとりあえず 質問掲示板 へお願いします。

基本的な質問

Ruby/Qteスクリプトを普通のQtopiaアプリのようにデスクトップから起動したい。

まず、スクリプトの名前.desktop というファイルをテキストエディタで作ります。中身はこんな感じです。

[Desktop Entry]
Comment=Foo
Exec=foo.rb
Icon=foo
Type=Application
Name=Foo
CanFastload=1
Display=640x480/144dpi,480x640/144dpi

CanFastload?=1 は、高速起動オンを選択できるようにするオプションです。これはなくてもかまわないでしょう。

アイコンの画像ファイルを用意します。64x64ピクセル、PNG形式です。作るのが面倒なら、LinuxZaurusにはじめから入っている画像ファイル (tux-logo.png など) を流用してもよいでしょう。ファイル名が上の .desktop ファイルの Icon= に書いたものと一致するようにします。

Rubyスクリプトは先頭行に

#!/usr/bin/env ruby

が入っていることと、パーミッションが755になっていることが必要です。拡張子 .rb はないほうが単独のコマンドらしくなりますが、あってもかまいません。もし拡張子を削った場合は、.desktop ファイルの Exec エントリを一致させておきます。

次に、Rubyスクリプト、アイコン画像ファイル、.desktop ファイルをそれぞれ適切なディレクトリにコピーします。

Rubyスクリプト/home/QtPalmtop?/bin
アイコン/home/QtPalmtop?/pics
.desktopファイル/home/QtPalmtop?/apps/Applications

.desktopファイルを置くディレクトリですが、apps 以下に自分で新しくディレクトリを作って、そこに入れてもかまいません。

これらのファイルは本体をコピーせずに、シンボリックリンクを張ってもよいでしょう。たとえば、/mnt/card/Documents/rbwork/foo が作業ディレクトリで、そこに上記3つのファイルがあるとすると、

# WORKDIR=/mnt/card/Documents/rbwork/foo
# ln -s $WORKDIR/foo.rb /home/QtPalmtop/bin/
# ln -s $WORKDIR/foo.png /home/QtPalmtop/pics/
# ln -s $WORKDIR/foo.desktop /home/QtPalmtop/apps/Applications/

としておくだけでもいいわけです。スクリプトを頻繁に修正するような場合は、そのほうがコピーの手間が減って楽です。

また、スクリプトをコマンドラインから起動してテストするような場合には、スクリプトへのシンボリックリンクを実際に作る必要もありません ((inue? さんからの情報をもとに修正、追記))。

最後に、LinuxZaurusを再起動します。

再起動しなくても、コマンドラインで

$ qcop QPE/System 'linkChanged(QString)'

を実行すれば、デスクトップにアイコンが現れます。ただ、SL-C760などの機種では、アイコンをタップして起動すると、一瞬画面に何か現れた後、「しばらくお待ちください」などと出て、画面が真っ白になってしまいます。

オートパワーオフの設定時間を変更したい

oneです。 mplayerのフロントエンドを作成しているのですが、演奏中はオートパワーオフされないように時間(分)を最大にし、演奏終了後は元に戻したいのですが、どのAPIを使用すればよいのでしょうか?

noirです。

memn0ckさんのサイトの DIGITAL-MONO:LinuxZaurus/QCop? に、スクリーンセイバー停止の QCop (用語集/QCop) メッセージとして

qcop QPE/System 'setScreenSaverMode(int)' 0

というのが紹介されていますが、どうやらこれでオートパワーオフもとめられるようです。

oneです。 うまく行きました。オートパワーオフの設定値は3分ですが、30分程度演奏できました。

トラブルシューティング

スクリプトの実行中に、別のアプリに切り替えてしまい、戻れなくなった。

ターミナルに切り替えて、Ctrl-Z を入力し、スクリプトの実行をサスペンドします。コマンドラインのプロンプトが現れたら、

ps

を実行して、ruby が何番のプロセスIDで動いているかを確認します。それがわかったら、

kill プロセスID

で、スクリプトを終了します。

ちなみに、サスペンドした後に、

bg
qcop QPE/Application/スクリプト名 'raise()'

を実行すると復帰するはずなのですが、SL-C760などでは表示画面が乱れてしまい、うまくいきません。「Ruby/Qteスクリプトを普通のQtopiaアプリのようにデスクトップから起動したい。」の要領で、デスクトップにアイコンを作っておけば、タスク切り替えができるようになります。

日本語が化ける。

Ruby/Qteでは、RubyのStringとQtのQStringとの相互変換が行われています。この相互変換により、UTF-8エンコーディングの文字列がLatin1に変換されてしまい、そのために日本語が化けてしまいます。

これを防ぐには、String → QString のときに QString::fromUtf8(str) としたり、QString → String のときに qstr.utf8.to_str などとします。

Rubyの変数に QString オブジェクトを保持してそのまま Qt のメソッドに渡すようなときには、このような処置はいりません。

スクリプトを実行しようとしたら、: No such file or directory とエラーメッセージが出る。

スクリプトの改行コードが CR LF になっていると、先頭行 (#!/usr/bin/env ruby) 末尾の CR が、コマンド行に渡す文字列に含まれてしまいます。スクリプトの改行コードを LF にすれば解決します。

コメント

  • アイコンの大きさですが、C700用とかだと32x32ではなく64x64ですね。訂正しました。 -- noir 2003-09-13 (土) 14:19:48
  • 日本語の扱いについて、QString::fromLocal8Bit と QString#local8Bit を使うのが紹介されているケースが多いと思いますが、前にこれでなぜかうまくいかなかったのと、LinuxZaurusではファイル名がUTF-8エンコーディングなので、私は上記のようにしてます。 -- noir 2003-09-13 (土) 16:28:23
{{comment}}
Last modified:2012/02/12 04:56:45
Keyword(s):
References:[コメント2003] [臨時質問掲示板] [質問掲示板] [SideMenu] [FrontPage]