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の強力な絞り込みでかなりの登録数があっても一発で探し当ててくれます。
こんな使い方も便利かもしれません。(登録次第ですが)