Raspberry Pi ZERO W (Window Manager dwm)

File Manager RangerそしてApplication Launcher dmenuと続いたのでWindow Managerを再検討してみたいと思います。

超軽量級且つ実用的なWindow Managerとして今回はタイル型のdwmを試してみたいと思います。

ここにウィンドウマネージャ(ディスクトップ環境)のメモリを比較した記事があります。
A Memory Comparison of Light Linux Desktops

dwmのメモリ使用量は1MBとtwmより少ないですね。
タイル型は基本キーボードを主体とする使い方になりますがdwmを参考、forkしたものが多いとあるので極めて素性のいいウィンドウマネージャと思います。
これはぜひ試してみるしかありません。

参考サイト https://wiki.mma.club.uec.ac.jp/clear/dwm

xmodmap

ZERO Wはヘッドレスでインストール、vnc接続で運用しているためxmodmapの確認

mod4 = winkeyが使えないですね。
xmodmap -e から変更が可能なので起動時~/.vnc/xstartupに書いておくことにします。

$ xmodmap -e "keysym Meta_L = Super_L"
$ xmodmap -e "keysym Meta_R = Super_R"

インストール

# apt install dwm

インストールしたdwmを見ると/etc/alternatives/dwmにリンクされています。

$ sudo update-alternatives --config dwm


dwm.winkeyにセットしてみる。
デフォルトの修飾キーはmod1[Alt]キーなのでサイズも同じことからmod4[winkey]になっていると思います。
linux系は親切ですね〜

alternativesにはx-window-managerもあります。

~/.vnc/xstartupや~/.xsessionに記述が無ければここの設定が使われることになります。

今回はここでの設定は行わずにxstartupから起動することにします。
lxpanelはコメントアウト

現在の~/.vnc/xstartup

#!/bin/csh
xmodmap -e "keysym Meta_L = Super_L"
xmodmap -e "keysym Meta_R = Super_R"
xrdb $HOME/.Xresources
xsetroot -solid black
xsetroot -cursor_name left_ptr
autocutsel &
xbindkeys &
xterm -e ranger --confdir=~/.config/ranger &
#lxpanel &
dwm &
scim -d
/etc/X11/Xsession

この設定で再起動


mode4 = [winkey] で起動しました。

Pi3 openbox設定
mode4[winkey] + dはPi3側のopenbox設定でデスクトップ全体のアプリケーションが最小化します。
~/.config/openbox/lxde-pi-rc.xml 無効に設定

253 <!--
254     <keybind key="W-d">
255       <action name="ToggleShowDesktop"/>
256     </keybind>
257 -->


xtermを起動して横2分割
mode4[winkey] + h 境界移動(left)
mode4[winkey] + l 境界移動(right)


mode4[winkey] + i 縦2分割
境界移動はできない
mode4[winkey] + d 横2分割戻り
う〜ん 快適ですね。
詳しい説明は先の参考サイトに載っています。
やはり色やフォントサイズその他気になるところを修正したくなります。

Raspberry Pi ZERO W (dmenu)

dmenuはタイル型ウィンドウマネージャのdwmと同じ開発元の軽量且つコンパクトなアプリケーションランチャーです。surfブラウザも同じ開発元ですね。

キーボードから起動できるランチャーとしてPi ZERO Wにインストール、設定してみたいと思います。

インストール 起動

raspbianではdmenuは以下に含まれています。

# apt install suckless-tools

/usr/bin/以下に3個のファイルがインストールされます。
dmenu dmenu_parh dmenu_run
ターミナルからdmenu_runを実行します。

$ dmenu_run -fn mono:size=20 2>/dev/null


実行は見やすくするためでかい文字サイズを指定しています。
またtightvncのアプリケーション実行はXlib:xxxのエラーが出てしまうためエラー出力を捨てています。


左側の入力欄に文字を入力するとどんどん絞り込をします。入れ方次第でヒットする率も上がってきます。
dmenu_runはスクリプトになっています。dmenu_parhを実行、dmenuに渡して選択、shellに送って実行。
dmenu_parhはosから実行コマンドを検索して~/.cache/dmenu_runを作成します。
現在1413個のコマンドが登録されています。

実際にはユーザーが実行できるコマンドも限られておりまたオプション付きで実行することが多いのでdmenu_runを利用することは限られると思います。topや対話型のコマンドも終了してしまいます。
タイル型ウィンドウマネージャでは採用されていることも多いようなので何らかのスクリプトやパッチがあるものと思っています。

そこで見様見真似ですがスクリプトを参考に簡単な自己登録型のmenuを作成してみます。
ひとつはウィンドウ付きのアプリケーションを実行するmain menuをもう一つはターミナルから起動するその他sub menuを設定してみました。

スクリプト dmenu_main

~/binを作成してスクリプトを置きます。PATHの確認(無ければ追加)

$ mkdir ~/bin
$ echo $PATH
/home/pi/bin #含まれていること

~/bin/dmenu_main

#!/bin/sh
cache=$HOME/bin/dmenu_main_list
(
dmenu -p dmenu -fn mono:size=12 -sb CornflowerBlue -sf black "$@" < "$cache" 2>/dev/null
) | ${SHELL:-/bin/sh} &

実行権限

$ chmod 755 ~/bin/dmenu_main

~/bin/dmenu_main_list

xterm
xterm -e ranger
lxterminal
leafpad
xterm -e w3m ~/.w3m/bookmark.html
lxappearance

dmenu_mainにはショートカットキーを割り当てます。

# apt install xbindkeys

設定ファイル

$ xbindkeys -d > ~/.xbindkeysrc

キーを設定

$ xbindkeys -k


割り当てたいキーを調べます。
実行するとウィンドウが出るのでキーを押します。
取り敢えずAlt + mとAlt + dにdmenu_main Alt + xにxtermを設定してみました。
.xbindkeysrcの適当なところに書き写します。
“NoCommand”を実行したいcommandに変更(dmenu_main)

~/.xbindkeysrc

"dmenu_main"
    m:0x8 + c:50
    Alt + m

"dmenu_main"
    m:0x8 + c:41
    Alt + d

"xterm"
    m:0x8 + c:61
    Alt + x

~/.vnc/xstartupに追加登録(適当なところに)

xbindkeys &

再起動確認

ショートカットキーOKですね。
dmenuの取り消しはEsc
dmenu_main_listの追加変更はrangerを利用すると簡単便利です。

スクリプト dmenu_sub

~/bin/dmenu_sub

#!/bin/sh
cache=$HOME/bin/dmenu_sub_list
(
dmenu -b -p command -fn mono:size=12 -sb lightgreen -sf black "$@" < "$cache" 2>/dev/null
) | ${SHELL:-/bin/sh} &

実行権限

$ chmod 755 ~/bin/dmenu_sub

~/bin/dmenu_sub_list

xwininfo
xbindkeys -k
xterm -e sudo fdisk /dev/sda
xterm -e sudo update-alternatives --config x-terminal-emulator
xterm -e htop
その他思いつくまま適当


表示はbottomにしています。
.bashrcにはaliasを追加

alias ds='dmenu_sub'

$ source .bashrc


terminalを追加インストールするとデフォルトのx-terminal-emulatorは変更になってしまうことがあります。滅多に使わないコマンドですがrootで実行、x-なんたらくらい覚えているとdmenuの強力な絞り込みでかなりの登録数があっても一発で探し当ててくれます。
こんな使い方も便利かもしれません。(登録次第ですが)

Raspberry Pi ZERO W (File manager Ranger)

前回のPi ZERO Wにファイルマネージャーを導入してみます。
キーボード主体が目標ということもあってFreeBSDでは一部不満の残る結果となったRangerをRaspbianで再度トライすることにしました。

Rangerはvim likeな高機能のファイルマネージャーですがvim使いの人なら少し触っていくと基本の動作はおおよそ掴めると思います。

Ranger インストール

# apt install ranger highlight poppler-utils atool mediainfo

w3m-imgは依存関係でインストールされます。
設定ファイル

$ ranger --copy-config=all
creating: /home/pi/.config/ranger/rifle.conf
creating: /home/pi/.config/ranger/commands.py
creating: /home/pi/.config/ranger/commands_full.py
creating: /home/pi/.config/ranger/rc.conf
creating: /home/pi/.config/ranger/scope.sh

使用するターミナルxtermからrangerを実行します。

lxterminaは画像を表示できません。
前回~/.Xresourcesを変更したことでdefaultのcolorschemeでも見やすくなりました。
やはりテキストファイルはデフォルトでviewしてくれますね。

~/.config/ranger/rc.conf

29 set show_hidden true
62 set preview_images true
104 set draw_borders true


ソースコードを色付きでview (highlight)


pdf 埋め込まれている文字をview (poppler-utils)


圧縮ファイル関連もRasbianが対応、インストールしているものはviewもOKです。(atool)
必要に応じて追加すればいいと思います。


画像表示もOKですね。(w3m-img)
メディア情報をviewします。(mediainfo)

動画をview
ZEROでは動画再生は実質不可なのであまり意味が無いのですが折角なのでテストをしてみます。
またffmpegthumbnailerをインストールすることでかなりのライブラリが追加されます。用途によって特に必要がなければインストールしないほうが無難と思います。

# apt install ffmpegthumbnailer

~/.config/ranger/scope.sh 以下を有効にする

80     video/*)
81       ffmpegthumbnailer -i "$path" -o "$cached" -s 0 && exit 6 || exit 1;;


インストール、設定がなければmediainfoでmedia情報をviewします。
初回は~/.cache/ranger以下にキャッシュファイルを作成します。
さらに進んで実行するとmplayerがインストールしてあれば超スローで再生を開始します。

~/.config/ranger/rifle.conf

ext mp4 = mediainfo "$@" | less


rifle.confの冒頭附近に記述
mplayerの代わりにmediainfoを実行して全文を表示させます。

w3m


html view
w3mのbookmarkはhtmlで記述されています。
実行するとw3m起動(同一ウインドウ)
rifle.confのw3mは最後に記載されています。他にブラウザがあってw3mをrangerのデフォルトにする場合は先頭に記載するようにします。


keymapを適当に設定しておくと使いやすくなると思います。(w3mのはなし)

https://github.com/tokuhirom/w3m/blob/master/doc-jp/README.func

Pi ZERO W raspbian-stretch-liteからのシンプルな環境ではうまく動作してくれるようです。
Pi 3 raspbian-stretchでは画像関係のviewはダメですね。xtermもfontconfigがうまく当たらない。素直にGUIを使ったほうが良さそうです。

Raspberry Pi ZERO W + Nexus7(2012)

当サイトには基本ディスプレー、キーボードの付いた有効なマシンはPi3しかありません。
万一Pi3、もしくはローカルLan内のなにかに異常があった場合調査、復旧に困難を伴うことがあります。
またPi3への新規インストールの際にもコンソール画面だけでは効率が悪くなります。

現在は出番の少なくなったNexus7(2012)+keybordとPi ZERO-Wを合わせてもう1台のmini-PC環境を構築してみたいと思います。


Nexus7とPi ZERO-Wはなんの捻りもないvnc接続ですがZERO-Wにはraspbian-stretch-liteをインストール、ヘッドレスでxorgから軽量のX環境を構築、vncをNexus7の画面サイズに合わせて起動して専用端末風に見せかけています。ローカルLan内限定です。

ZERO-W インストール

Pi3でカード作成(デバイス名確認、注意のこと)

# dd if=2018-11-13-raspbian-stretch-lite.img of=/dev/sda bs=1M

書き込みが終わったらカードの段階で最低限の設定をしておきます。(各自の環境)
pcmanfmからカードのbootに空ファイルssh作成、ターミナルからネットワーク設定

$ sudo cp /etc/wpa_supplicant/wpa_supplicant.conf /media/pi/rootfs/etc/wpa_supplicant

/media/pi/rootfs/etc/dhcpcd.conf # 追記

static ip_address=192.168.0.13
static routers=192.168.0.1
static domain_name_servers=192.168.0.1

カードをZERO-Wにセットして起動、sshで接続してセットアップ続行
pi3の/etc/hostsにはアドレスとhostnameを登録

$ ssh pi@raspberrypi
$ sudo raspi-config
Locale ja_JP.UTF-8
Timezone Asia Tokyo

exit exitしてssh再接続
updateしてX関連インストール

root@raspberrypi:~ # apt update && apt -y upgrade
root@raspberrypi:~ # apt install xorg twm tightvncserver autocutsel fontconfig fonts-ipafont fonts-ricty-diminished scim-anthy
root@raspberrypi:~ # exit

インストールが終わったらvncserverを起動してパスワード設定

pi@raspberrypi:~ $ vncserver
You will require a password to access your desktops.
Password: 
Verify:   
Would you like to enter a view-only password (y/n)? n
xauth:  file /home/pi/.Xauthority does not exist

New 'X' desktop is raspberrypi:1

一旦kill $ vncserver -kill空白:1になります

pi@raspberrypi:~ $ vncserver -kill :1
Killing Xtightvnc process ID 19560


Pi3はウインドウが混み合ってるのでFreeBSDから作業をしています。
インストール直後のupdateでは1.1G
X関連インストール後は1.4G

ZERO-Wには~/.vnc/xstartupが作成されています。下記はコメントアウトされているので外して有効にします。

x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &

再度vncserverを適当なサイズを指定して起動

pi@raspberrypi:~ $ vncserver -geometry 800x480 -depth 24


FreeBSDのvncviewerから呼び出しています。

% vncviewer raspberrypi:1

Xが正常に起動、確認できたところでkill

pi@raspberrypi:~ $ vncserver -kill :1

使いやすく軽量なUI、ツールをインストール

root@raspberrypi:~ # apt install tcsh openbox lxpanel lxappearance lxterminal leafpad vim pix-icons gnome-icon-theme

~/.Xresourcesの作成と日本語環境

基本の手順はFreeBSDで作成したものと一緒です。FreeBSD 12.0 日本語環境
必要なパケージはxorgの項でインストールしてあります。
~/.Xresourcesを作成します。
65xxx.conf(3個)を適当なディレクトリに作成、実行スクリプトは下記を使います。
font_set.sh

#!/bin/sh
sudo cp *conf /etc/fonts/conf.avail
cd /etc/fonts/conf.d
sudo ln -s ../conf.avail/65-fonts-ipa-mincho.conf
sudo ln -s ../conf.avail/65-fonts-ipa-pgothic.conf
sudo ln -s ../conf.avail/65-fonts-monospace.conf

ディレクトリ内で実行

 $ sh font_set.sh

~/.vnc/xstartupの編集

#!/bin/csh

xrdb $HOME/.Xresources
xsetroot -solid grey
xsetroot -cursor_name left_ptr
autocutsel &
xterm -geometry 80x24+115+55 &
lxpanel &
scim -d
/etc/X11/Xsession

日本語入力は最軽量級と思われるscim-anthyを導入しました。
ここもやはりFreeBSD同様xstartupはcshで動かします。scim-anthyは以前の経緯からすると.bashrc .cshrcに記述するようになっていますが現在はbshell系からは起動しないようです。
ZERO-Wにはtcshをインストール、FreeBSDの.cshrcを作成、ホームディレクトリに置きます。
~/.cshrcには次の2行が必要です。

setenv  LANG    ja_JP.UTF-8
setenv  XMODIFIERS @im=SCIM

ユーザーのshellはbashでOKです。
ウインドウマネージャは自動でopenboxが適用されます。

defaultにあるexport XKL_XMODMAP_DISABLE=1は無視されますが当サイトで試した限りでは特に問題ないようです。cshはスクリプトに不敵と言われていますが他はshellを問わない実行コマンドなので問題ないと思います。


漢字キーはデフォルトでControl+spaceとZenkaku_Hankakuが適用されていますがNexus7キーボード用にControl+jとControl+kを追加しました。(Control+jはleafpadで使っている)
Zenkaku_Hankakuは時々効かなくなることがあります。

vncのサイズはNexus7から見やすい708×440で起動することにしました。
起動は手軽にcrontabに設定します。

pi@raspberrypi:~ $ crontab -e
@reboot sudo -u pi /usr/bin/vncserver -geometry 708x440 -depth 24

pi@raspberrypi:~ $ sudo reboot

androidからの接続はbVNC Freeを使いました。

VNC Connection Settingsに必要な項目を入力
ホスト名 raspberrypi 接続ポート 5901
ユーザー名 pi
パスワード ********
入力したら Connect


Nexus7からもデフォルトの状態でも問題なく見えますね。
キーボードは500円のケース付き中華キーボード(micro usb)と無印blue toothキーボードがあります。
どちらも使えますが中華キーボードは一部記号キーが刻印と違っています。
やはり無印でもblue toothキーボードに軍配が上がります。

ZEROに標準のraspbian-stretchをインストールするとあきらかにもっさりした感じになるのですがこちらは軽快に動作します。(大物のアプリケーションはダメですが)
vnc特有の再描写感は少しあります。

次回はファイルマネージャーの導入とNexus7からはマウスなしキーボードのみの運用を目指しているのでここらをテストしてみたいと思います。

Raspberry Pi 2 on FreeBSD 12.0 Applications

ここ数日でpackagesが大幅に更新されています。現時点でmakeが通るものは全てpkgに登録されている感じがします。

PCManFMもインストールできますね。

openbox lxpanelなども登録されています。
UIはまた次の機会に変更しようと思います。

webブラウザはchromium-browser,firefoxはまだのようですがepiphanyなどwebkit系のブラウザがインストールできます。但しcoreを吐いて起動できません。
Web browser are in “segmentation fault (core dumped)” in Rpi 2

原因は確認していませんがURLのページにある現象と思います。オプションを追加してportからwebkitgtkをmakeするといいようです。

取り敢えずは日本語文章などをコピーするくらいなのでw3m-imgで充分かな。


音もデフォルトでOKですね。

画像関連も一般的なものはほとんど利用できるようです。


pkgからインストールするffmpegはffplayを使用できません。
vnc接続もあってか大きな映像はスムーズに再生できませんが元ファイルの映像サイスが320×240程度であればmplayerで遅延もなく再生できます。

I’m curious! わたし、気になります

さて気になっていたPi-FreeBSDですがRaspberry Piでは起動デバイスがSDカード(mmcsd0)とあってか余計な手間もなくFreeBSD4の頃の感覚で扱うことができました。(内容は大分進化していると思いますが)

取り敢えず設定済みのカードが1枚あれば今後新たにカードを作成する際にも設定ファイルなどを利用することができます。これからも少しFreeBSDで遊んでみようと思います。

Top