ヘッドレスな Ubuntu で仮想ディスプレイを使う

Ubuntu
スポンサーリンク

雑多な備忘録ですが、せっかくなので残しておきます。

2022-08-31 追記

ここに色々書いてはいますが、結局 fluxbox を使う方法 が一番問題が起こらず良いです。 GDM3 や Light DM を諦めて、 fluxbox でリモートデスクトップ用にまともなデスクトップ環境を整えるようにすることをオススメします。一度、fluxbox の設定に慣れておけば、今後の Ubuntu のバージョンアップの際にいちいち躓かなくて良くなります。

Ubuntu 18.04 の resolv.conf を直す

Ubuntu 18.04 の VNC がやたら遅い。特に初回接続時に入力を受け付けない時間があり、とても不快。結局、全部 16.04 にインストールし直すことにする。

sudo rm -f /etc/resolv.conf
sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
sudo reboot

これをしないと、VNC接続時に10秒の Delay が生じる。

Ubuntu 18.04 で GDM3 を使った場合

sudo sed -i -e "s/#WaylandEnable=False/WaylandEnable=False/" /etc/systemd/resolved.conf

Wayland を使っているとちゃんと動かないらしい。

x11vnc の起動コマンド

sudo /usr/bin/x11vnc -loop -forever -bg -xkb -noxrecord -noxfixes -noxdamage -shared -norc -auth /run/user/1000/gdm/Xauthority -rfbport 5900 -rfbauth

1000 などの数字の部分は以下のコマンドで確認しておく。

sudo loginctl 

Ubuntu 17.10 & 18.04 – Configure x11vnc to boot at startup – Griffon’s IT Library

以上で接続はできるが、VNC接続した時のマウスカーソルがかっこ悪すぎる。使いたくないので lightdm を使うのがおすすめ。

Ubuntu 18.04 で Lightdm を使った場合

lightdm に切り替える。

apt install lightdm
dpkg-reconfigure lightdm

x11vnc の起動コマンドは下記のようになる。

sudo /usr/bin/x11vnc -display :0 -noxdamage -auth /var/run/lightdm/root/:0 -forever -loop -noxdamage -repeat -shared -rfbport 5900

Nvidia の場合

ドライバのインストール

NVIDIAドライバダウンロード

このページからバージョンを確認する。

sudo apt-cache search 'nvidia-.+$' | grep 430

一致したバージョンのものを上記コマンドなどで探す。

nvidia-xconfig

Xvfbを使う方法などは、XvfbがNvidia関連のバグで正常に動かなくなる。そのため、nvidia-xconfigを使う必要がある。

Ubuntu 16.04

sudo nvidia-xconfig -a --virtual=1920x1080  --allow-empty-initial-configuration

このコマンドを叩くだけでできる。

これだけでOK!

Remote Off-Screen Rendering with OpenGL | ArrayFire

VirtualGL | Documentation / Headless nVidia Mini How-To

OpenGL/GLXを使うXアプリケーションをkubernetes/dockerコンテナ内でheadlessに動かした話 | Ryought::Lab

Ubuntu 18.04

xorg – X server on NVIDIA card with no screen – Super User

sudo nvidia-xconfig -a --virtual=1920x1080 --allow-empty-initial-configuration --use-display-device="DFP-0" --connected-monitor="DFP-0" --custom-edid="DFP-0:/etc/X11/edid.txt"

なぜか 16.04 の方法ではログイン後に固まってしまう。そのため、monitor に DFP-0 を指定しなければならない。また、custom-edidを適切に設定しなければ resolution が小さくなってしまう。理由はわからん。edid.txt の設定方法は下記。

sudo sh "echo '00 ff ff ff ff ff ff 00 1e 6d f5 56 71 ca 04 00 05 14 01 03 80 35 1e 78 0a ae c5 a2 57 4a 9c 25 12 50 54 21 08 00 b3 00 81 80 81 40 01 01 01 01 01 01 01 01 01 01 1a 36 80 a0 70 38 1f 40 30 20 35 00 13 2b 21 00 00 1a 02 3a 80 18 71 38 2d 40 58 2c 45 00 13 2b 21 00 00 1e 00 00 00 fd 00 38 3d 1e 53 0f 00 0a 20 20 20 20 20 20 00 00 00 fc 00 57 32 34 35 33 0a 20 20 20 20 20 20 20 01 3d 02 03 21 f1 4e 90 04 03 01 14 12 05 1f 10 13 00 00 00 00 23 09 07 07 83 01 00 00 65 03 0c 00 10 00 02 3a 80 18 71 38 2d 40 58 2c 45 00 13 2b 21 00 00 1e 01 1d 80 18 71 1c 16 20 58 2c 25 00 13 2b 21 00 00 9e 01 1d 00 72 51 d0 1e 20 6e 28 55 00 13 2b 21 00 00 1e 8c 0a d0 8a 20 e0 2d 10 10 3e 96 00 13 2b 21 00 00 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 26' > /etc/X11/edid.txt"

X11VNC

TARGET=''
ssh $TARGET

sudo x11vnc -storepasswd
# Enter Password

sudo bash -c "echo "[Unit]
Description=x11vnc (Remote access)
After=multi-user.target

[Service]
Type=simple
ExecStart=sudo /usr/bin/x11vnc -display :0 -noxdamage -auth /var/run/lightdm/root/:0 -forever -loop -noxdamage -repeat -shared -rfbport 5900 -rfbauth /home/$USER/.vnc/passwd -xkb

[Install]
WantedBy=multi-user.target
" > /etc/systemd/system/x11vnc.service"
sudo systemctl daemon-reload
sudo systemctl enable x11vnc
sudo systemctl restart x11vnc

ログインしてすぐ XIO ERROR が起こる時

/var/log/syslogを確認して /home/anna/.Xauthority の読み出しに失敗していないか確認する。権限がrootになっていたらエラーになる。ファイル

以下の情報はOpenGLを使う場合の情報。

Xvfb を使う場合

lightdm を使う方法

DTIのVPS上にデスクトップ環境を作るという試み — 実験メモとかいろいろ

上記リンクのやり方でログイン画面まではできた。ただ、ログインしたらすぐにx11vncが切れてしまった。

LightDMをXvfb上で動作するように構成

/etc/lightdm/Xvfb.sh として次のファイルを作る。 用意するデスクトップのサイズと色数は、1024x768x24のところで指定している。

#! /bin/sh

exec /usr/bin/Xvfb -screen 0 1024x768x24 -nolisten tcp

パーミッション等を調整。

$ sudo chown root:root /etc/lightdm/Xvfb.sh
$ sudo chmod 755 /etc/lightdm/Xvfb.sh

/etc/lightdm/lightdm.conf の [SeatDefaults] セクションの xserver-command を設定する。

[SeatDefaults]
xserver-command=/etc/lightdm/Xvfb.sh

LightDMを再起動する。

$ sudo /etc/init.d/lightdm restart

fluxbox を使う方法

Xvfbで作った仮想ディスプレイにリモートデスクトップ接続する – いしだ日記

sudo apt-get install fluxbox x11vnc xvfb
export DISPLAY=:0
nohup Xvfb :0 -screen 0 1280x1024x24 > /dev/null 2>&1 &
nohup fluxbox > /dev/null 2>&1 &

これでfluxboxをwindow-managerとしたデスクトップ環境が得られる。

fluxboxをバックグラウンドで起動します。

x11vncをこれまたバックグラウンドで起動します。

2019-08-17

Ubuntu のデスクトップが立ち上がらないのは gdm などのウィンドウマネジャーが起動していないことが原因みたい。gdm かなにかを立ち上げられるように頑張る。

How to Switch Between GDM and LightDM in Ubuntu

ubuntu 16.04 の default window manger は lightdm。

参考リンク

How to run X server using xserver-xorg-video-dummy driver on Ubuntu – TechOverflow

debian – Unable to start X Server with no screens, no xorg.config to edit – Unix & Linux Stack Exchange

おっさんエンジニアの実験室: x11vnc、Xvfb、Xdummy、VirtualGL とか

How can I run lightdm on Xvfb on a Raspberry Pi? – Super User

12.04 – vnc using lightdm and x11vnc disconnects immediately after valid login – Ask Ubuntu

X11vnc – ArchWiki

nvidia – ubuntu 16.04 gives “X Error of failed request: BadValue (integer parameter out of range for operation)” when running OpenGL programs – Ask Ubuntu

Headless Rendering · smartscenes/sstk Wiki · GitHub

コメント

タイトルとURLをコピーしました