1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

(メモ)LinuxでVDI環境を作る

Posted at

はじめに

いままでノートPCをメインに使っていて、自分のホームディレクトリを全部持ち歩いていた(約700GB)のだが、バックアップ作業が家でしかできないとか、コンパイルやら仮想マシン構築をやってるときはノートPCの電源を入れとかなきゃいけないとか、何らかの理由でノートPCが使えなくなった時に作業が止まってしまうので、VDI環境を構築してみた。

まぁ、画面共有だけならVNCでええか、と思っていたのだが、RDPだと音も飛ばせて便利かな、と思って接続方式はそっちです。

環境とインストール

今回インストールした環境は

  • VDIクライアント: ubuntu studio 20.04.3
  • VDIサーバ: ubuntu studio 21.04

モジュールのインストールは以下の感じ(dependencyの都合で他のモジュールもあったけど)

VDI クライアント

 apt-get install remmina*

VDI サーバ

 apt install xrdp x11vnc

x11vncの自動起動

xrdpはsystemd制御下なので、デフォルトでサーバ起動時に起動する。
x11vncはsystemd配下にないので、事前にsshでログインしてから手動で起動するか、サーバ起動時にsystemdで起動したい場合は以下の感じでファイルを作って:

/etc/systemd/system/x11vnc-user.service

[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が標準になったら(もうなってる説あるけど)もっと楽に構築できるといいなぁ。

1
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?