
Ubuntu日本語フォーラム

ログインしていません。
いつも、大変お世話になっております。
端末から・・・
$ cd ~/Java_Src/IF8_libusb/USB-IOminiA
$ java -cp $HOME/libusbjava/java/lib/ch.ntb.usb-0.5.9.jar:. UsbCtrlPane
・・・という形式で、端末から起動しているアプリケーションがあるのですが、これをメニューに登録して起動するには、どのようにすればよろしいのでしょうか?
どなたか、宜しくご教授くださいませんでしょうか。
オフライン
過去の投稿を見るに、Ubuntu 10.04を使ってますよね?
メニューに登録したいのですね。
「システム」 ->「設定」 -> 「メイン・メニュー」を開き、「新しいアイテム」を作成し、「種類」は「アプリケーション」とし、「コマンド」欄は、
sh -c 'cd 移動先ディレクトリのパス && exec 起動したいコマンドライン'
です。
※"exec"は無くてもいいです。あると結果的にshのプロセスを1つ節約することになります。
なお別解として、シェルスクリプトにやりたい事を書いて、そのシェルスクリプトのパスを「コマンド」欄に登録する方法もありますが、その為にファイルを新たに作って管理するのは、スマートじゃないと私は思うのです。
STGSAGWAN 様
さっそくご回答いただき、大変にありがとうございます。
それで・・・
sh -c 'cd ~/Java_Src/IF8_libusb/USB-IOminiA && exec java -cp $HOME/libusbjava/java/lib/ch.ntb.usb-0.5.9.jar:. UsbCtrlPanel'
・・・のように「コマンド」欄に記入しましたら、しっかりとメニューに登録されております。(すばらしい!)
それで、起動しましたところ端末で起動したときとまったく同様に、画面は表示され、ボタン操作などもできるのですが、肝心の動作(USB通信)ができていません。
おや、何か環境が悪くなったかなと、USBの接続などはそのままで、従来通り端末から起動すると大丈夫です。同じことを数回繰り返しましたが、結果は同じです。
それで次は、「"exec"は無くてもいい」とのことでしたので、そのように変更して実行してみました。これも結果は同様です。
そもそもこれは何をしているかと申しますと、I/Oを持つ外付け機器とUSBを通して接続し、入出力をするというものです。なぜ、教えていただいたやり方で動作しないのかは、今後の研究課題にしたいと思います。ですが、一般的に端末のコマンドラインをこういう形式でメニューに登録できることを教えていただいて、ありがとうございます。
それで、もし、よろしければ「シェルスクリプトにやりたい事を書いて、そのシェルスクリプトのパスを「コマンド」欄に登録する方法」を具体的にお教えねがえませんでしょうか。エディタは、通常は'gedit'を使っています。
オフライン
お願いばかりではダメだ、自分で努力しなければと思い、下の書き込みを見つけました。
Linuxにおけるシェルスクリプトの書き方
http://yoshiiz.blog129.fc2.com/blog-entry-43.html
・・・それで、これを参考にいたしまして次のようなファイルを作りました。
---------------------------------------------------
場所:$HOME/Java_Src/IF8_libusb/USB-IOminiA <- 実行クラスのあるディレクトリ
ファイル名:USB-IOminiA.sh
内容
#!/bin/sh
cd ~/Java_Src/IF8_libusb/USB-IOminiA
java -cp $HOME/libusbjava/java/lib/ch.ntb.usb-0.5.9.jar:. UsbCtrlPane
exit
---------------------------------------------------
このファイルに実行権限を与えて、端末から次のように絶対アドレスを指定して・・・
$ $HOME/Java_Src/IF8_libusb/USB-IOminiA/USB-IOminiA.sh
・・・実行すると起動し、正常に動作いたします。であれば、教えていただいたことを応用してメニューに登録すれば良いであろうと考えて・・・
sh -c $HOME/Java_Src/IF8_libusb/USB-IOminiA/USB-IOminiA.sh
・・・と記入し登録いたしました。結果的に、前回と同様の「起動はするがUSBの動作はしない」という結果になりました。
以上、状況のご報告です。
オフライン
昔、シェルスクリプトをかじったときに、 cd を普通に記述しても無効だったような気がします。
セミコロンでコマンドをつなげてカッコで括ってみては。
#!/bin/bash (cd Documents ; echo `date`>time.now) exit 0 ;
オフライン
TokioYamada による投稿:
それで、起動しましたところ端末で起動したときとまったく同様に、画面は表示され、ボタン操作などもできるのですが、肝心の動作(USB通信)ができていません。
「sh -c」の冒頭部分を「bash -i -c」に変えたらどうですか?
メニューやランチャーだと非インタラクティブなシェルになるんで。
投稿#4は私が考えていた方法とほぼ一緒です。
ただ一点だけ。(少しだけトピックの趣旨とは少し離れますが。)
TokioYamada による投稿:
端末から次のように絶対アドレスを指定して・・・
$ $HOME/Java_Src/IF8_libusb/USB-IOminiA/USB-IOminiA.sh
自分専用のシェルスクリプトは、$HOME/binに格納すると、端末やAlt + F2でもファイル名だけ入力して起動可能できるので、よりCoolです。
(※なお、初めて$HOME/bin ディレクトリを作成した場合は、~/.profileに書いてある~/binにパスを通すロジックを有効にしたいので、要再ログインです。)
Tako090929様へ
ご助言、ありがとうございます。さっそく、以下のように USB-IOminiA.sh を書き換えて実行してみました。
#!/bin/bash
(cd ~/Java_Src/IF8_libusb/USB-IOminiA ; java -cp $HOME/libusbjava/java/lib/ch.ntb.usb-0.5.9.jar:. UsbCtrlPanel)
exit 0 ;
結果は、「起動はするがUSBの動作はしない」というこれまでの結果になりました、残念です。
STGSAGWAN様
追加のご助言、ありがとうございます。
さっそく、「sh -c」替えて、下記のようにメニューに登録して実行して見ました。
bash -i -c $HOME/Java_Src/IF8_libusb/USB-IOminiA/USB-IOminiA.sh
これでもやはり、「起動はするがUSBの動作はしない」ということになりました。
それで、この後・・・
> 自分専用のシェルスクリプトは、$HOME/binに格納すると、端末やAlt + F2でもファイル名だけ入力して起動可能できるので、よりCoolです。
・・・を実行してみて、これをメニューに登録した場合はどうなのかについて試してみたいと思っています。この件は、後ほど投稿いたします。
オフライン
STGSAGWAN様
確かに Cool ですね! コマンドラインからは何処にいても USB-IOminiA.sh だけで起動できて、しかも確実に動作します。教えていただき、ありがとうございます。
しかし、残念ながら Alt + F2 でファイル名だけ入力しても、「起動はするがUSBの動作はしない」という結果です。
ちなみに、「自動起動するアプリ」に登録したら、これもまた同様に、「起動はするがUSBの動作はしない」でした。
要するに、コマンドラインからの起動はどこから(場所)であっても全く問題ないのに、その他のツールからはUSBの動作が不良になるということですね。う~ん???
オフライン
今回のJavaプログラムの場合は、非インタラクティブなシェルの場合に動かず、インタラクティブなシェルだと動く、ように私には見えます。
そこで、環境変数の違いか?と思い、投稿#6では-i オプションについて言及しました。
ただ、メニュー登録の話から離れ、特定プログラムの動作可否について話し合うことは、現トピックではオフトピだと思うので、私はここで降りさせていただきます。
STGSAGWAN様
色々と、ご助言いただき、感謝いたします。 ありがとうございました。
オフライン