見出し画像

いまさら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

この記事が気に入ったらサポートをしてみませんか?