だいぶ前のことですし、今更感がありますが…。
一応やり方が見つかったため、タスクバーまで非表示にしてしまう全国の表示領域絶対主義者の皆さんの役に立つかもしれませんので報告しておきます。環境は Slacko ではなく
Lupu-528JP です。
jwm 設定まわりで出くわしたのは、次のよう制限でした。
- 1つのキーバインドに複数のショートカットを割り当てられない
- 動作の指定は基本的に予約語によって設定する
- rdesktop などはキーを押下で jwm が動作を横取りする(/root/.xbindkeysrc 等で KeyRelease イベントにより続けてコマンドを実行できない)
- 複数の処理をさせるには予約語「exec」でコマンドを実行するくらいしか
- rdesktop を実現するコマンドは見当たらない(あったら教えて下さい)
結構ややこしくて、あちらを立てればこちらが…的なジレンマに陥ります。
で、(かなり反則技ですが)keyevent を発行するソフトを知ったのがきっかけで解決しました。
crikey というソフトをダウンロードし、make して出来上がった実行ファイルをパスの通ったところに設置しておきます。
そして /root/.jwm/jwmrc-personal に
コード: 全て選択
<Key mask="A" key="Right">exec:r_desktop.sh</Key>
<Key key="Super_R">rdesktop</Key>
と指定しておきます。
上は Alt + 右キーで r_desktop.sh を実行するというもの。
下は rdesktop 機能を別のキーに指定しています。ここでは私が使っていなかった Super_R キーに割り当てています(どのキーでもいいのですが、仮想デスクトップを直接移動させるコマンドが分かっていない以上はこの段階を踏まないとうまくゆかないです)。
続いて 1つ目で実行するよう指定したファイル(r_desktop.sh)を用意します。
パスが通った適当なディレクトリ(/root/my-applications/bin 内とか)に入れておいてください。
コード: 全て選択
#!/bin/sh
(exec crikey -S 250 '\(Super_R\)')
screen_num=$(xprop -root | grep "_NET_CURRENT_DESKTOP(CARDINAL)" | cut -d "=" -f2 | sed "s/ //g")
exec gtkdialog-splash -fg blue -bg green -placement center -fontsize large -timeout 2 -text "screen $screen_num"
jwm が処理を横取りする際に関連したプロセスを殺すようで、サブシェル + exec + -S オプションでディレイをかけることでようやく動きました。
PC の性能によってはディレイの間隔を変えるほうがよいのかもしれません。
ここまでやったら jwm を再起動します(左下の「メニュー」から「デスクトップの修復」もしくは「X サーバをリスタート」)。
流れとしては、
- 自分で決めた仮想デスクトップ遷移ショートカットキーを押す
- r_desktop.sh が実行される
- サブシェルにより、さらに別のキーが押下され rdesktop イベントが発生
- 1つ右の仮想デスクトップへと遷移
- r_desktop.sh 内の「仮想デスクトップ番号取得」用コードが実行される
- 新しい仮想デスクトップ番号を splash で表示
crikey というソフトに依存しまくっているのが癪ですが、「ま〜これでいいかなぁ」と思ってます。
でも、一番簡単なのは Joe(jwm の作者さん)に「1つのキーにキーバインドを複数設定できるようにしておくれよう!」とお願いすることなのかもしれません。
やれやれ
ただ、「任意のキーを押したことにできるソフトなんて、(セキュリティ上)入れちゃっていいのか??」という点は
ちょこっとだけ気になりますね。Enter キーを押したことにもできるし。
まぁ、だからこそ初期設定のコマンドに keyevent や keycode を X ウインドウシステムへと発行するものが見当たらないのかな。
もしそのようなコマンドがあるようでしたら、どなたか教えていただけるとありがたいです。