3
1

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.

Ubuntu 18でログイン画面でも画面共有を使いたい

Posted at

はじめに

研究室の共有サーバをUbuntu 18にアップデートしましたが,VNCによる画面共有が使えないことに気づきました.調べてみるとディスプレイマネージャがLightDMからGDMに戻ったことで,x11vncが使えなくなったことが原因のようです.

Ubuntu 18の画面共有はVinoを使っており,ログインしないとアクセスできません.つまり,常にログインしっぱなしにしておかないと駄目で,再起動したら現場に行くしかなくなります.

解決策

解決策はいろいろあります.

  • GDMを消してLightDMを使う →共有サーバなので変えにくい……
  • x11vncだけを使う →ログインすると真っ暗に
  • 他のVNCサーバを使う →TigerVNCを使ってみたがうまく動作せず
  • そもそも画面共有を使わない →Xのフォワーディングだけで頑張るのはちょっとキツい
  • x11vncとvinoを共存させる →面倒だけどこれならできそう……

x11vncとvinoを共存させる

結局,これに行き着きました.ログイン画面にいるときはTCP5901でx11vncに接続して,ログイン後にTCP5900でvinoに接続し直します.

vinoを有効にする

シンプルにvinoをインストールして,GUIで有効にするだけです.
クライアントがmacやWindowsの場合は,暗号化を解除する必要があるので,dconf-editorを入れておきましょう.
dconf-editorを開いたら,org -> gnome -> desktop -> remote-accessの中にあるrequire-encryptionをfalseにしておきます.

sudo apt install vino dconf-editor

GUIで設定できない(デスクトップにアクセスできない)場合……

dconfコマンドで設定すればGUIにアクセス出来ない状態でも設定できます.
まずはネットワーク接続のUUIDを確認して……

$ nmcli connection show
NAME        UUID                                  TYPE      DEVICE    
docker0     xxxxxxxxxxxxxxxxxxxxxxxxxx  bridge    docker0   
有線接続 1  yyyyyyyyyyyyyyyyyyyyyyyyyy  ethernet  enp0s31f6 

dconf writeでvinoを有効にしたいコネクションを指定します.今回はEthernetを指定したいので,後者のUUIDを指定します.

dconf write /org/gnome/settings-daemon/plugins/sharing/vino-server/enabled-connections "['yyyyyyyyyyyyyyyyyyyyyyyyyy']"

dconf readで設定が確認できます.

$ dconf read /org/gnome/settings-daemon/plugins/sharing/vino-server/enabled-connections
['yyyyyyyyyyyyyyyyyyyyyyyyyy']

x11vncを有効にする

続いて,x11vncをインストールします.

apt-get install x11vnc

x11vncのパスワードを設定します.
パスを指定しない場合,パスワードのファイルは /home/<user>/.vnc/passwd に保存されます.

x11vnc -storepasswd

起動時にx11vncが上がるようにする

VNCをサービスとして取り扱うため,x11vnc.serviceを作成します.
5900ポートはvinoが使っているため,5901を使います.
/etc/systemd/system/x11vnc.serviceを以下のように編集します.

x11vnc.service
[Unit]
Description=x11vnc (Remote access)
After=multi-user.target

[Service]
Type=simple
ExecStart=/usr/bin/x11vnc -auth /run/user/<UID>/gdm/Xauthority -display :0 -rfbauth /home/<user>/.vnc/passwd -rfbport 5901 -forever -loop -noxdamage -repeat -shared

[Install]
WantedBy=multi-user.target

<UID>は,ps -auxw | grep Xauthで確認できます.以下のように,XauthorityのフルパスがわかればOKです.この例だと1001になります.
たぶん/run/user/<UID>/gdm/Xauthorityが2つ以上出てくると思うので,もし接続できなければ別を試すと動くかもしれません.(rootで固定だと思っていましたがそうではないっぽい)

$ ps -auxw | grep Xauth
root     19522  0.3  0.2 381404 71100 tty2     Sl+  14:17   1:41 /usr/lib/xorg/Xorg vt2 -displayfd 3 -auth /run/user/1001/gdm/Xauthority -background none -noreset -keeptty -verbose 3

最後に以下を実行して,サービスが動いているか確認します.

$ sudo systemctl daemon-reload
$ sudo systemctl enable x11vnc
$ sudo systemctl start x11vnc

$ sudo systemctl status x11vnc
● x11vnc.service - x11vnc (Remote access)
   Loaded: loaded (/etc/systemd/system/x11vnc.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2020-05-11 18:27:11 JST; 2 weeks 3 days ago
 Main PID: 2144 (x11vnc)
    Tasks: 2 (limit: 4915)
   CGroup: /system.slice/x11vnc.service
           ├─2144 /usr/bin/x11vnc -auth /run/user/1001/gdm/Xauthority -display :0 -rfbauth /home/ryorsk/.vnc/passwd -rfbport 5901 -forever -loop -noxdamage -repeat -shared
           └─2184 /usr/bin/x11vnc -auth /run/user/1001/gdm/Xauthority -display :0 -rfbauth /home/ryorsk/.vnc/passwd -rfbport 5901 -forever -loop -noxdamage -repeat -shared

あとは,vnc://<addr>:5901に接続してログインし,vnc://<addr>:5900に接続しなおせばOKです.少し面倒ですがこの作業が必要になるのは再起動後くらいなので我慢します.ちなみに上記の作業はCUI環境のみで完結するので,万が一設定し忘れてサーバルームに放り込んでしまっても大丈夫です.

参考

http://fx-kirin.com/ubuntu/ubuntu-vnc-server/
https://freefielder.jp/blog/2015/10/ubuntu-vnc-server-on-startup.html
https://qiita.com/lin_noob/items/afadb3a8a0897e4be909#7vncx11vncサーバのインストール

3
1
1

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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?