Raspberry Pi 4 raspios + jwm

当サイトのRaspberry Pi 4はLXPanelの不具合がなかなか解決しないので前回moOde audioで採用したウィンドウマネージャーJWMをRaspberry Pi 4に適用してみました。

ウィンドウマネージャーJWM

ベースとなるraspiosは64bit 2022-09-06-raspios-bullseye-arm64を新規インストール。主なパッケージをインストール、環境を設定しています。
jwmをインストール (.jwmrc jwm-menu作成)

$ sudo apt install jwm
$ mkdir ~/jwm
$ cp -r /etc/jwm ~/
$ cp ~/jwm/system.jwmrc ~/.jwmrc
$ cp ~/jwm/debian-menu ~/jwm/jwm-menu

ウィンドウマネージャーを変更
/etc/xdg/lxsession/LXDE-pi/desktop.conf 2行目mutter -> jwm

[Session]
window_manager=jwm

オートログイン /etc/lightdm/lightdm.conf(126行目)

autologin-user=pi

Xは.xsessionから実行することにします。
~/.xsession (chmod 755 .xsession)

#!/bin/sh
xrdb ~/.Xresources
xmodmap ~/.Xmodmap
fcitx &
sleep 1
exec /usr/bin/jwm

再起動
パネルは下部に表示、シンプルな画面。デフォルトのLXDEはそのまま。アプリケーションがdockに対応していればパネルに格納してくれます。fcitx可能

JWM設定
raspiosにインストールされているパッケージはLXDEの一部を除いて利用可能ですがjwmではLxpanelのプラグインやメニューへのアプリケーション自動追加などは利用できません。bluetooth設定などは別途アプリケーションをインストールします。
jwmのパネルやメニューを設定。パネルは上部にロゴ変更、ページャは右側に11個配置、LXPnelのページャと比べると若干視認性が悪いので2個増やして予備に中9個を今まで同様割り当てます。


サイズはパネルに合わせて縮小してくれます。

当サイトではよく使うアプリケーションはpythonメニューに大体登録済みです。jwmメニューはカテゴリを用意して新規インストールしたものや気がついたものをサクッと登録するようにします。

設定例
.jwmrc
jwm-menu
メニューのスタートは上記画像の幅を広げて新たにファイルを作成アイコンのみとしています。
アプリケーション、カテゴリアイコンは.jwmrcのアイコンパスを追加

カテゴリアイコンは視認性の良いHighContrastを設定、メジャーなアプリケーションはlabel=とicon=を同一名にすることでヒットする確率が高くなります。拡張子も必要ありません。表示しない時は適当なアイコンファイルをパスの通ったところにコピーファイル名を指定
.xsession再編集
jwmは起動時のアプリケーションスタートアップが無いので.xsessionの最後にスクリプトを走らせます。xdotiil,devilspie2を利用、位置、サイズ、ワークスペースを振り分けます。適当にsleepを入れて起動します。必要であればスクリプトファイルを複数用意してメインのスクリプトから呼び出します。最後は終わりの無いアプリケーションを実行。当サイトは最後にhtopを実行しています。htopを終了するとjwmが強制終了、ログイン画面になるので注意が必要です。

#!/bin/sh
xrdb ~/.Xresources
xmodmap ~/.Xmodmap
xbindkeys &
devilspie2 &
fcitx &
/usr/bin/jwm &
sleep 1
exec ~/bin/startup/work.sh

スクリプトファイルは起動したいアプリケーションを並べて行きます
後述するideskもこのスクリプトから実行(.xsessionに直接書くと何故か壁紙を適用しない)
(例 $ chmod 755 work.sh)

#!/bin/sh
/usr/bin/chromium-browser &
sleep 10
# idesk
idesk &
sleep 1
# htop
xterm -geometry 72x14+85+31 -e htop

今まで寸足らずのパネルも幅いっぱいになりました。メニューも登録したものだけなので非常にスッキリしています。

デスクトップアイコン、壁紙

デスクトップアイコンや壁紙は必須では無いですが全く無いと若干さみしいですね。デスクトップアイコンはpcmanfmが普通に動くので設定も可能かもしれませんがここはシンプルなideskを使うことにします。ideskは壁紙も設定可能です。

$ sudo apt install idesk

idesk
設定ファイル.ideskrcをコピー、デスクトップアイコン設定ファイル用のディレクトリ.idesktopまたideskは隠しディレクトリ(.dir)はidesk再起動時ファイルを読みに行かないのでアイコンファイル用のディレクトリidesktop(dot無し)を作成

$ mkdir ~/.idesktop
$ mkdir ~/idesktop
$ cp /usr/share/idesk/dot.ideskrc ~/.ideskrc
$ cp /usr/share/idesk/default.lnk ~/.idesktop/

Background.SourceとBackground.FileがNoneになっているので適当なファイル名を記載します。Background.Fileが優先するようです。またマウスleftクリックはシングルクリック設定。

  Background.Source: /usr/share/rpd-wallpaper/balloon.jpg
  Background.File: /usr/share/rpd-wallpaper/bridge.jpg

  Execute[0]: left singleClk

idesk デスクトップアイコン
~/.idesktop/default.lnkをコピーしてchromium.lnkを作成。アイコンは48pixを使用、サイズは調整可能
jwmメニューのrestartを実行すると画面を再描写するせいか壁紙も終了してしまいます。default.lnkは後述する壁紙ツールを実行します。
またidesk自体の起動は.xsessionから実行するスクリプトから起動

default.lnk
table Icon
  Caption: Idesk
  Command: ~/bin/wallpaper.py
  Icon: /usr/share/idesk/folder_home.xpm
  Width: 40
  Height: 40
  X: 25
  Y: 45
end

chromium.lnk
table Icon
  Caption: Chromium
  Command: chromium-browser
  Icon: /home/pi/idesktop/chromium.png
  Width: 40
  Height: 40
  X: 25
  Y: 115
end

Wallpaper Select Tool

raspberry piの壁紙はDebian 7 (Wheezy)の頃からほとんど変わっていない記憶があります。そろそろ飽きも来ていることからウィンドウマネージャをjwmにしたことでLXDEの外観設定が不可になったこの機会に壁紙設定ツールを作成してみました。画像ファイルは安全と思われるサイトからダウンロードするようにします。

wallpaper.py_20230110
リストはraspiosのデフォルト画像ディレクトリ(/usr/share/rpd-wallpaper/)とHomeディレクトリ(/home/pi/画像/wallpaper/)を選択できます。リストから画像ファイルを選択GET Wallpaperボタンをクリック(./.ideskrc Background.File)を書き換えideskを再起動して適用します。rangerは選択しているディレクトリで起動、画像を確認(rangerは予め画像を表示出来るよう設定)
ブラウザからダウンロードしたファイルはReloadでリストに反映。
jwm restartで壁紙が終了したらRestartボタンでideskを再起動。
ディレクトリの移動可(多少画像ファイル数多くても整理可)



こういうのもありです!
jwm restartを繰り返しているとsurf(moode player)がいつの間にか終了していることがあります。再起動は問題無いので特に影響は無いと思います。LXDEの一部機能は使えませんが特に問題になることは無いと考えています。しばらくJwm環境で使ってみようと思います。