いまさらRaspberryPiにSPI TFT(2)
以前の記事で、液晶ディスプレイにデスクトップを表示させるまでできた。
でも、Raspberry Piを入れ直した所で同じ設定をしたら、挙動がいくらか変わってしまったので、それを解決したい。
画面の回転
以前はちゃんと表示できていたのに、180度反転してしまった。
なんでこんな挙動が変わるかね。。。
仕方無しに、画面の回転を設定することにする。
Webで検索をしたところ、/boot/cmdline.txtを書き換える方法があった。
試してみたけど、CUI画面は回転するものの、GUI(x window)を開始すると元に戻ってしまった。
失敗。
/boot/cmdline.txt
(行末の設定に追加)
fbcon=map:10 fbcon=rotate:90 fbcon=font:VGA8x8
Raspberry Piの起動について調べていくと、設定ファイル/boot/config.txtにて設定ができるらしいことがわかった。
参考ページはここ。
ちなみに、答えは/boot/overlays/READMEの中にあった。
まさに幸せの青い鳥。
/boot/config.txt
(文末の設定に追加)
dtoverlay=rpi-display,rotate=90
これだけで、CUIもGUIも画面の向きが直った。
設定をすれば左右反転とか、バックライト制御用ピンを変えたりできるみたい。
メニューバー(パネル)が点滅したり表示されない
上記の問題を解決しても、パネルが出てこないという問題が発生。。。
ネットを調べたところ、よくある質問(後述※1)とは違う挙動を示しているので、状況を詳しく挙げます。
なお、下記の「startx」は、「FRAMEBUFFER=/dev/fb1 startx」のことです。
/boot/config.txt、/boot/cmdline.txtの設定は行って、「sudo mv /usr/share/X11/xorg.conf.d/99-fbturbo.conf /root/」までは実行してあるものとします。
・/etc/rc.localに記述した「startx」では問題発生
・CUIからユーザー権限で「startx」では正常
・CUIからsudoで「startx」では問題発生
つまり、管理者権限で「startx」をしたらパネルが表示されないという状況でした。
なんとかユーザ権限で「startx」をしたいからと、
su - pi -c startlcd
(startlcdスクリプト)
FRAMEBUFFER=/dev/fb1 startx
などしてみましたが、うまく行きませんでした。(やり方の問題?)
一つの解決方法として、「CUIで認証なし起動して、.bash_profileでstartx」を行うことで、なんとかパネルありでGUI起動できましたので、メモを残しておきます。
(1)HDMIモニタやssh接続などで通常の起動をする
(2)管理者権限で「raspi-config」をして、CUI起動(認証なし)に設定する
(3)/boot/config.txt の文末に下記を追加
dtoverlay=rpi-display
(4)/boot/cmdline.txt の行末に下記を追加
fbcon=map:10 fbcon=font:VGA8x8
(5)/etc/rc.localに、99-fbturbo.confを移動させるスクリプトを書いておく。
ここで、ロックファイルを削除する仕掛けを入れておく。詳細は後述。
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
printf "My IP address is %s\n" "$_IP"
fi
mv /usr/share/X11/xorg.conf.d/99-fbturbo.conf /root/
rm /home/pi/.lock_x
exit 0
(6)/home/piディレクトリの.bash_profileに、「startx」を追加する。多分、.bash_profileは初期状態では無いので、新規で作ることになる。
※私が作ったのは下記。初めて作ったので正しくないかも…。
.bash_profileはログイン時に一度だけ行われる。ただしこれが実行されると、.bashrcが実行されなくなる。なので、.bash_profile内で.bashrcを実行するようにしている。
※もうひと工夫で、ロックファイルが無い場合にのみstartxを実行するようにしている。なぜかというと、sshで接続した場合も.bash_profileは実行されるため、startxは起動時の1度のみにしたいため。
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
export PATH="$HOME/hoge:$PATH"
if [ ! -e /home/pi/.lock_x ]; then
echo 0 > /home/pi/.lock_x
FRAMEBUFFER=/dev/fb1 startx
fi
(7)再起動すると、ユーザ"pi"でログインしたデスクトップがLCDに表示される、はず。
※下記の問題は修正しました(2021/4/18)
問題が一つあって、.bash_profileにstartxを設定したので、sshで接続してログインしたときもstartxが実行される。(失敗するけど)
(※1)ネットで調べて見つけた、よく似た症状は、「ユーザ権限でGUI起動したときにパネルが点滅、または表示されない」というものでした。その解決方法は、起動したユーザのグループに「audio」「video」を追加するというもの。pulseaudio関連の問題とかなんとか…うーん、何が関連しているのか分かりませんが、ご参考まで。
(<newuser>はユーザ名)
sudo adduser <newuser> video
sudo adduser <newuser> audio
この記事が気に入ったらサポートをしてみませんか?