はじめに
いままでノートPCをメインに使っていて、自分のホームディレクトリを全部持ち歩いていた(約700GB)のだが、バックアップ作業が家でしかできないとか、コンパイルやら仮想マシン構築をやってるときはノートPCの電源を入れとかなきゃいけないとか、何らかの理由でノートPCが使えなくなった時に作業が止まってしまうので、VDI環境を構築してみた。
まぁ、画面共有だけならVNCでええか、と思っていたのだが、RDPだと音も飛ばせて便利かな、と思って接続方式はそっちです。
環境とインストール
今回インストールした環境は
- VDIクライアント: ubuntu studio 20.04.3
- VDIサーバ: ubuntu studio 21.04
モジュールのインストールは以下の感じ(dependencyの都合で他のモジュールもあったけど)
apt-get install remmina*
apt install xrdp x11vnc
x11vncの自動起動
xrdpはsystemd制御下なので、デフォルトでサーバ起動時に起動する。
x11vncはsystemd配下にないので、事前にsshでログインしてから手動で起動するか、サーバ起動時にsystemdで起動したい場合は以下の感じでファイルを作って:
[Unit]
Description=x11vnc (Remote access)
Requires=display-manager.service
After=display-manager.service
[Service]
Type=simple
ExecStart=x11vnc -noipv6 -listen localhost -env FD_XDM=1 -display :0 -auth /home/普段ログインするユーザ/.Xauthority -rfbport 5900 -forever -loop -noxdamage -repeat -shared -nap -wait 50 -nomodtweak
ExecStop=/bin/kill -TERM $MAINPID
ExecReload=/bin/kill -HUP $MAINPID
KillMode=control-group
Restart=on-failure
[Install]
WantedBy=multi-user.target
作ったら以下のコマンドを投入。
systemctl daemon-reload
systemctl enable x11vnc-user
systemctl restart x11vnc-user
ユーザディレクトリに.Xauthorityがないとログインできない事があるので、事前に一回ログインしておくか、sddmの設定で普段ログインするユーザでオートログインするようにしておく。
つーかXauthorityとかXDMCPまわりはようわからん。この辺Waylandでなんとかなってたりせんか?どうなんや?まぁ調べるのは今回は割愛
Caps → Control_L問題
さーできた、と思ってサーバ側をリブートして、クライアントからVDI環境にアクセスしてみる。
やっぱりCapsLockが生きてやがる!!
まぁ長年来のemacs民なので左Control_Lは多用するわけで、本当にCapsLockは世界から滅びればいいのにって思いつつ試行錯誤してみたところ、結論としては以下の感じらしい。
- keymap周りの設定は、クライアントのX11→xrdp→x11vnc→サーバのX11と接続されるので、その度にキーボードレイアウトやらkeymapまわりの変換が入る(ぎゃぁぁぁぁ)
- クライアント側は単品で使うこともあるので xmodmapに
remove Lock = Caps_Lock
.
keysym Caps_L = Control_L
,
add Control = Control_L
,
あたりを入れたりした。setxkbdmap -option caps:ctrl_modifier
なんかでも可 - RDPクライアントのremminaにもグローバル設定のRDPタブの所に設定がある。とりあえずキーボードレイアウトは自動検出、クライアントのキーボードマッピングを使用するにチェックを入れといた
-
/etc/xrdp/xrdp_keybord.ini
の[default]
セクションにキーボードレイアウトを指定する所があるので指定する。今回はkeybord_type=7
,keyboard_subtype=2
,すなわちJapanese keyboard/FreeRDP JP keyboardとした。 - x11vncは起動時のオプションでキーマップを一部remapしたりしできるが、色々試した結果、とりあえず
-nomodtweak
オプションだけ指定することにした - で、やっとこさVDIサーバのX11にアクセスできるわけであるが、
xev
で検出してるキーコード調べてみると、Caps押すとクライアント側とは違うキーコードでCapsが送られてたりする、なんでや。 - 今回はVDIサーバ側のxmodmapに以下の設定をしといた。
- remove Lock = Caps_Lock
- keysym Caps_Lock = Control_L
- keysym Eisu_toggle = Control_L ←←←←←←←こいつ!!!
- add Control = Control_L
残る課題
- たまにオートリピートが変(リモートだからしゃぁないか)
- やっぱなんか急にCapsLock入ってやがる、クソッ
- 音が引っ張ってこれない(このためにわざわざRDP選んだのに....)
- RDPサーバ側にpulseaudio-module-xrdpを入れる必要があるらしい
- そもそもubuntu studioはパッケージが用意されてないのでフォルトでpulseaudio-module-xrdp は入らない
- やむなくapt source pulseaudio-module-xrdpなどしてコンパイル
(知らんかったけどapt build-dependencyってやるとコンパイルに必要なモジュール全部引っ張ってきてくれるのな!!) - やっぱ鳴らない(というかなんか全般的に不調)
- remminaがたまに固まる....
これに加えてクライアントPCに水こぼしてタッチパネルがおかしくなったりトラブル続きで久々に難儀しました。
Waylandが標準になったら(もうなってる説あるけど)もっと楽に構築できるといいなぁ。