目的
Qtを使用してBBB上でGUIアプリを動作させる。GUIアプリではKeyPressEventを使用してキーボードの入力値を取得している
GUIアプリはBBBの電源投入で自動起動させる
環境
BeagleBoneBlack + AngStrom(3.8) + Qt(5.1)
# uname -a
Linux beaglebone 3.8.13 #1 SMP Wed Aug 14 16:25:00 CEST 2013 armv7l GNU/Linux
Qt Window Systemを使用する為、XServerを無効化しておく。
Linux beaglebone 3.8.13 #1 SMP Wed Aug 14 16:25:00 CEST 2013 armv7l GNU/Linux
Qt Window Systemを使用する為、XServerを無効化しておく。
# systemctl disable gdm.service
XServerはsystemdで管理されているので、GUIモード中にCUIモードにしたい場合
# systemctl stop gdm.service
Xserverをまた立ち上げたい場合
# systemctl enable gdm.service
オートログイン化の為に、以下のサービスを編集している。
/etc/systemd/system/getty.target.wants/serial-getty@tty1.service
#ExecStart=-/sbin/agetty --noclear %I 38400 linux
ExecStart=-/sbin/agetty -a root %I 38400 linux
試行
【1】telnetでログインしてQt-GUIアプリを起動
・ウィンドウ生成 成功・ログファイル出力 成功
・仮想キーボード・LCD4ボタン共に反応せず
【2】BOOT1時のsystemdによる自動起動
・ウィンドウ生成 成功・ログファイル出力 成功
・仮想キーボード・LCD4ボタン共に反応せず
・init.dによる起動も試みたが同様
【3】USBキーボードを接続してログイン、Qt-GUIアプリを手動起動
・ウィンドウ生成 成功・ログファイル出力 成功
仮想キーボード・LCD4ボタン共に反応せず
考察
BBBに直ログインした場合、端末名はtty1。telnetでログインした場合、端末名はttyO0。
systemdで自動起動した場合、端末名は"?"("ps ax"コマンドで確認)
tty1からアプリを起動しないとキーボードを取得出来ないらしい。
systemdによる起動は、ログインプロンプトに先駆けて行われるので端末と結び付けられていない。
なのでログイン後にアプリを自動起動する必要があるが、.bashrcや.bash_profileはAngstromでは機能しない。
対策
ログインプロンプトはsystemdによって管理されるサービスによって実行され、コマンドはagettyが使用される。agettyは、ログインの方法に標準の"/bin/login"の代わりに独自のプログラムをroot権限で実行する"-l"オプションが存在する。
これを利用して、アプリの起動→終了後に/bin/loginを実行するスクリプトをagettyから読み出す。
/etc/systemd/system/getty.target.wants/serial-getty@tty1.service
ExecStart=-/sbin/agetty -l /home/root/MyApp.sh -a root %I 38400 linux
/home/root/MyApp.sh
#!/bin/bash
/bin/login root
参考文献
man of agettyLinux起動の仕組みを理解しよう[rcスクリプト編]
Automatic login on Angstrom Linux
Systemd入門(1) - Unitの概念を理解する
自作プログラムをデーモンとして起動させる(by init.d)
systemdの*.serviceファイルの書き方
Create Startup Script in Angstrom
Automatic login on Angstrom Linux
BeagleBone Black(Angstrom)にSSHで入れるようにする
Qt4 自前のsignalの作り方
Qt Events
.bashrc と .bash_profile 結局どっちを使えばいい?
0 件のコメント:
コメントを投稿