「VNC をセカンドディスプレイとして使う on Ubuntu 18.04」
https://qiita.com/nanbuwks/items/d12a98c8d41630c31a55
では、いろいろヘンなことをして実現しているため、いろいろヘンなことが起こります。
一番には、VNCサブディスプレイ内で残像が無限に更新し続けるという問題があります。
これをごまかすため、適当なアプリウィンドウをVNCサブディスプレイ内で最大化しています。
背景を表示しないようにすればこの問題は解決します。
スライドショー
適当なアプリということで、壁紙ライブラリをスライドショーで表示することにしました。
壁紙アプリとしてristrettoを使います。
Photo Claudio Schwarz | @purzlbaum
スライドショーアプリとして、以下を選びました。
- スライドショー時に全画面表示にならない
- VNCサブディスプレイ内でウィンドウ位置制御ができる(xdotool使用)
- スライドショー間隔の調整ができる
意外と条件を満たすものが無かった。(選定の詳細はAPPENDIXにて。)
手作業だとめんどくさいのでスクリプトにします。しかしながら本来
wmctrl -ir $window_id -e 0,0,0,1920,1080 #
だけで大丈夫なはずが、VNCサブディスプレイ内にスライドショーアプリが入ってないとうまくいきません。
起動時にはリアルディスプレイ内部にしか表示されないようなので、以下のようにめんどくさい手順を踏むことにしました。
- ristrettoを起動して
- 最大化になっていれば解除
- 画面境界に移動
- ristrettoのスライドショーをF5で開始
- Alt+Spaceでウィンドウのキーボード操作を可能にする
- 移動メニューを選ぶ
- 矢印キーで移動
- エンターで位置確定
- ウィンドウをVNCサブディスプレイの背景を覆うサイズに変更
このような操作をキーボードから行うのと同じようにスクリプトから操作します。
ristrettoのスライドショーオプションもうまく動かないので、F5キーを押してスライドショーを開始する操作も自動化します。
環境
- Ubuntu 18.04
- 使用するツール
- xdotool
- wmctrl
スクリプト
ristretto /home/nanbuwks/Downloads/unsplash -s & # ristrettoを壁紙フォルダを指定して起動
xdotool sleep 2 # 起動するまでの待ち時間
window_id=$(xdotool getactivewindow) # restrettoウィンドウIDを取得
echo $window_id # デバッグ用
wmctrl -ir $window_id -b remove,maximized_vert,maximized_horz # 最大化で起動した場合位置移動ができないため最大化を解除
wmctrl -ir $window_id -e 0,0,200,500,500 # 位置を画面端に移動(本来これでVNCサブディスプレイに移動するはずがウィンドウの左端座標が1920位置にしかならない)
xdotool sleep 0.4
xdotool key F5 # スライドショー開始
xdotool sleep 0.4
xdotool key alt+space # ウィンドウのキーボード操作を可能にする
xdotool sleep 0.4
xdotool key Down # 移動メニューのために下矢印を2回
xdotool sleep 0.2
xdotool key Down
xdotool sleep 0.2
xdotool key Return # 移動メニュー選択
xdotool sleep 0.1
xdotool key Left # ウィンドウを移動してVNCサブディスプレイ内に
xdotool sleep 0.1
xdotool key Left
xdotool sleep 0.1
xdotool key Left
xdotool sleep 0.1
xdotool key Left
xdotool key Return # 位置確定
wmctrl -ir $window_id -e 0,0,0,1920,1080 # VNCサブディスプレイ全体を覆う
APPENDIX
試したスライドショーアプリ
- eog (Ubuntu標準の画像ビューワ)
- shotwell
- nomacs
- slide
- geeqie
- gthumb
- gwenview
- viewnior
- mirage
- ristretto
と試してristrettoになりました。