
Ubuntu日本語フォーラム

ログインしていません。
いつも、お世話になっております。
Ubuntu10.04.1 LST を使っています。 これは、「初心者サポート」の「端末から起動しているソフトをメニューに登録するには」の投稿の続きとなります。
前のスレッドでは、STGSAGWAN様に大変お世話になり、メニュー登録以外にも色々教えていただきまして、すごく勉強になりました。内容がメニュー登録以外のことになりますので、別にお伺いすることにいたしました。
何をスタートアップしようとしているかについて・・・
雑誌:Interface2011年8月号に、libusbを使ってJAVAで外部のUSB機器を制御することの特集があり、同じJAVAのソースでWindowsでもLinuxでも動作させられるということに魅力を感じてUbuntuを導入し、その評価を開始しました。(1997年ころ、ほんの少しLinuxを扱って以来ですので初心者です、扱い易くなっていることに驚いています)
WindowsとUbuntu上にそれぞれ環境を設定し、その両方でJAVAからUSB機器を制御することができるようになりました。ソースが同一で双方で動くことは感激でした。双方とも、コマンドプロンプトからの起動です。その続きとしてまず、Windows上でBATファイルを作成し、それをスタートアップに設定して、立ち上がりで起動できて、正常に動作いたしました。それと同じことをUbuntu上で実行すると、アプリとしてスタートはする(画面は表示され、コントロールも扱える)のですが、USB通信の動作をいたしません。これは、スタートアップ以外のメニュー登録からもALT+F.2の「アプリケーションの実行」からも、全く同じ状況です。端末を起動して、.shファイルを実行させると問題なく動作いたします。
Ubuntuでの状況について・・・
様々に実験しましたので色々と変わりましたが、現在の $HOME/bin/USB-IOminiA.sh は次の通りです。
------------------------
#!/bin/bash
cd ~/Java_Src/IF8_libusb/USB-IOminiA
java -cp ch.ntb.usb-0.5.9.jar:. UsbCtrlPanel
exit 0
------------------------
また、メインメニューの登録のコマンドは以下の通りです。
bash -i -c $HOME/bin/USB-IOminiA.sh
このコードで、端末からはUSB-IOminiA.shの起動で問題なく、正常に動いています。ただ、これを、スタートアップ・メニュー登録・ALT+F.2のいずれでも起動はされ画面表示はできて、画面のコンポーネントの操作はできるのですが、肝心のUSB通信は成立していないようです。
それでも、端末から実行すると確実に動作するので、ALT+F.2の「アプリケーションの実行」にある「端末内で起動する」にチェックを入れて起動してみました。そうしますと、起動直後に端末には以下の表示がされて、かつ画面は表示され、コンポーネントの操作もできますが、USB通信はまったく成立しません。USB通信を行う操作をすると続いて大量のエラー(これは引用していません)が端末に表示されます。
【起動直後の端末メッセージ】
Exception in thread "main" java.lang.UnsatisfiedLinkError: no usbJava in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1738)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1028)
at ch.ntb.usb.LibusbJava.<clinit>(LibusbJava.java:366)
at UsbCtrlPanel.initUSB(UsbCtrlPanel.java:34)
at UsbCtrlPanel.<init>(UsbCtrlPanel.java:29)
at UsbCtrlPanel.main(UsbCtrlPanel.java:215)
このメッセージは、クラスパスがUSBのライブラリに届いていないというようなことを言っているのではないかと思っています。 ch.ntb.usb-0.5.9.jar がこの libusb 利用のライブラリで、元は別のディレクトリに入れて、そこにクラスパスを通していました(これはこれで端末起動はOKでした)。 しかし、あまりにもUbuntu上で動かないため、現在は起動クラスと同じ場所に置いています。
スタートアップができないと困りますので悩んでおります。
何の設定が悪いのか御指摘をお願いできませんでしょうか。(土日は不在のため返答が遅れるかもしれません)
オフライン
追加の情報として、Windowsで使っているバッチファイルは・・・
名称: USB-IOminiA.bat
内容:
cd \LibusbJava
java -cp ch.ntb.usb-0.5.9.jar;. UsbCtrlPanel
・・・で、ほとんどUbuntuでの USB-IOminiA.sh と同じことをしています。この USB-IOminiA.bat のショートカットをスタートアップに入れるだけで、問題なく動作しています。
オフライン
環境変数LD_LIBRARY_PATHの値に不備はないですか?
STGSAGWAN様
いつも、大変ありがとうございます。
'env' で見ましたところ・・・
LD_LIBRARY_PATH=/home/tokio/libusbjava/trunk/LibusbJava:
・・・という行が表示されています。
このディレクトリには、 libusb.a や usb.h, libusbJava.so...などが格納されています。
$HOME/.profile の最後に・・・
export LD_LIBRARY_PATH=$HOME/libusbjava/trunk/LibusbJava:$LD_LIBRARY_PATH
・・・という行を追加しています。確かに、この行を追加する前までは、端末からも起動されていませんでした。
オフライン
「export LD_LIBRARY_PATH~」の行をシェルスクリプトの中に書けばよいです。
STGSAGWAN様
ありがとうございます。お手数お掛けしました。
USB-IOminiA.shを・・・
#!/bin/bash
cd ~/Java_Src/IF8_libusb/USB-IOminiA
export LD_LIBRARY_PATH=$HOME/libusbjava/trunk/LibusbJava:$LD_LIBRARY_PATH
java -cp $CLASSPATH:ch.ntb.usb-0.5.9.jar:. UsbCtrlPanel
exit 0
・・・とすることにより、メニューから起動できるようになりました。
$HOME/.profile に記述していたものを /etc/profile に移したりなど色々やって見ましたが、それらの記述をすべて削除して、シェルスクリプトの中に書くことで、無事起動することができるようになりました。(なぜ、そうなるんだろういう疑問は残りますが・・・)
感謝いたします、本当にありがとうございました。
オフライン