Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision | |||
linux_faq:lxde_vnc-в-контейнере-lxc [2019/02/21 09:21] – [lightdm] admin | linux_faq:lxde_vnc-в-контейнере-lxc [2019/09/11 07:17] (current) – [Варианты решения] admin | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== Для чего ====== | ||
+ | Мне нужен **headless** LXC-контейнер с экономичным декстопным окружением, | ||
+ | |||
+ | ====== Варианты решения ====== | ||
+ | В качестве ОС контейнера выступает **Ubuntu 16.04**. \\ | ||
+ | Для запуска иксов в **headless**-контейнере понадобится эмуляция видеоадаптера. \\ | ||
+ | Для этих целей можно использовать либо **xvfb** (**X Virtual Frame Buffer**) либо **xdummy**. Оба пакета присутствуют в репозиториях большинства дистрибутивов, | ||
+ | В данной заметке я рассмотрю настройку двух этих решений. \\ | ||
+ | В качестве десктопного окружения я протестирую пару - **Xfce** и **LXDE**. Сразу скажу, что вариант с **Xfce** мне понравился гораздо больше. \\ | ||
+ | Для доступа к графической оболочке я планирую использовать **VNC** или **RDP** (но можно использовать и другие протоколы). Например: | ||
+ | |||
+ | ====== Xfce + xdummy + xrdp ====== | ||
+ | Установка необходимых компонент: | ||
+ | sudo apt-get -y install nano curl xserver-xorg-video-dummy xserver-xorg-core x11vnc xubuntu-desktop | ||
+ | Настройки **X** для работы с **xdummy** (файлик **/ | ||
+ | < | ||
+ | # This xorg configuration file is meant to be used | ||
+ | # to start a dummy X11 server. | ||
+ | # For details, please see: | ||
+ | # https:// | ||
+ | |||
+ | # Here we setup a Virtual Display of 1600x900 pixels | ||
+ | |||
+ | Section " | ||
+ | Identifier " | ||
+ | Driver " | ||
+ | #VideoRam 4096000 | ||
+ | #VideoRam 256000 | ||
+ | VideoRam 16384 | ||
+ | EndSection | ||
+ | |||
+ | Section " | ||
+ | Identifier " | ||
+ | HorizSync 5.0 - 1000.0 | ||
+ | VertRefresh 5.0 - 200.0 | ||
+ | Modeline " | ||
+ | EndSection | ||
+ | |||
+ | Section " | ||
+ | Identifier " | ||
+ | Monitor " | ||
+ | Device " | ||
+ | DefaultDepth 24 | ||
+ | SubSection " | ||
+ | Viewport 0 0 | ||
+ | Depth 24 | ||
+ | Virtual 1600 900 | ||
+ | EndSubSection | ||
+ | EndSection | ||
+ | </ | ||
+ | |||
+ | Список строчек для различных режимов: | ||
+ | < | ||
+ | Modeline " | ||
+ | Modeline " | ||
+ | Modeline " | ||
+ | Modeline " | ||
+ | Modeline " | ||
+ | ModeLine " | ||
+ | Modeline " | ||
+ | Modeline " | ||
+ | Modeline " | ||
+ | Modeline " | ||
+ | Modeline " | ||
+ | </ | ||
+ | |||
+ | ===== XRDP ===== | ||
+ | Я буду использовать связку **xrdp** + **xorgrdp**. Раньше довольно популярным было использование **x11rdp**, однако его поддержки нужно пересобрать **Xorg**, а в случае с **xorgrdp** этого не требуется. \\ | ||
+ | **Xrdp** можно установить из репозитория, | ||
+ | Ставим средства для сборки: | ||
+ | sudo apt-get install git autoconf libtool pkg-config gcc g++ make libssl-dev libpam0g-dev libjpeg-dev libx11-dev libxfixes-dev libxrandr-dev | ||
+ | Скачиваем и собираем: | ||
+ | mkdir ./xrdp | ||
+ | cd xrdp/ | ||
+ | wget https:// | ||
+ | wget https:// | ||
+ | tar -xvf ./ | ||
+ | cd ./ | ||
+ | ./bootstrap | ||
+ | ./configure --enable-fuse --enable-rfxcodec --enable-mp3lame --enable-pixman --disable-painter --disable-ipv6 | ||
+ | make | ||
+ | sudo make install | ||
+ | sudo ln -s / | ||
+ | cd .. | ||
+ | tar xvfz xorgxrdp-0.2.1.tar.gz | ||
+ | cd xorgxrdp-0.2.1 | ||
+ | ./bootstrap | ||
+ | ./configure | ||
+ | make | ||
+ | sudo make install | ||
+ | ==== Настройка XRDP ==== | ||
+ | В принципе, | ||
+ | sudo systemctl enable xrdp | ||
+ | sudo service xrdp start | ||
+ | Однако, | ||
+ | Для этого открываем файлик **/ | ||
+ | < | ||
+ | ; | ||
+ | ; Session types | ||
+ | ; | ||
+ | |||
+ | [Xorg] | ||
+ | name=Xorg | ||
+ | lib=libxup.so | ||
+ | username=ask | ||
+ | password=ask | ||
+ | ip=127.0.0.1 | ||
+ | port=-1 | ||
+ | code=20 | ||
+ | </ | ||
+ | |||
+ | ==== lightdm ==== | ||
+ | **/ | ||
+ | < | ||
+ | [Seat:*] | ||
+ | xserver-allow-tcp=false | ||
+ | xserver-command=X -nolisten tcp | ||
+ | </ | ||
+ | ==== Проблемы ==== | ||
+ | После обновления контейнера **Ubutnu 16.04** до **18.04** перестал работать **xrdp**. \\ | ||
+ | После ввода логина и пароля он долго тупит, а потом выдает: | ||
+ | login successful for display 10 | ||
+ | started connecting | ||
+ | connection problem, giving up | ||
+ | some problem | ||
+ | В логе **/ | ||
+ | [DEBUG] Closed socket 19 (AF_UNIX) | ||
+ | В логе **/ | ||
+ | [ERROR] X server for display 10 startup timeout | ||
+ | В директории пользователя, | ||
+ | < | ||
+ | [ 4034.807] (II) Loading / | ||
+ | [ 4034.807] (II) Module XORGXRDP: vendor=" | ||
+ | [ 4034.807] | ||
+ | [ 4034.807] | ||
+ | [ 4034.807] (EE) xorgxrdp: module ABI major version (20) doesn' | ||
+ | [ 4034.807] (II) UnloadModule: | ||
+ | [ 4034.807] (II) Unloading xorgxrdp | ||
+ | [ 4034.807] (EE) Failed to load module " | ||
+ | Причина - несоответствие **ABI** собранного вручную модуля **xorgxrdp** и текущего **Xorg**. \\ | ||
+ | Решение - пересобрать **xorgxrdp** с текущими библиотеками **xserver-xorg-dev** и переустановить его. | ||
+ | ====== LXDE + Xvfb + x11vnc ====== | ||
+ | В качестве ОС контейнера выступает **Ubuntu 16.04**, а в качестве **DE** - пакет **lubuntu-desktop**. | ||
+ | sudo apt-get update && sudo apt-get -y upgrade | ||
+ | sudo apt-get -y install nano curl xvfb xserver-xorg-core x11vnc lubuntu-desktop | ||
+ | Дальше план такой - в скрипт **/ | ||
+ | Поехали.\\ | ||
+ | Настраиваем **lightdm**, | ||
+ | [SeatDefaults] | ||
+ | greeter-session=lightdm-gtk-greeter | ||
+ | user-session=Xubuntu | ||
+ | xserver-command=/ | ||
+ | Cкорректируем **/ | ||
+ | #!/bin/sh | ||
+ | | ||
+ | #exec /usr/bin/X -nolisten tcp " | ||
+ | exec Xvfb :0 -screen 0 1024x768x24 | ||
+ | Теперь нужно организовать автоматический запуск **x11vnc**. Это можно сделать двумя путями. Либо прописать строку запуска в **/ | ||
+ | < | ||
+ | [Unit] | ||
+ | Description=Remote control service x11vnc | ||
+ | After=graphical.target | ||
+ | |||
+ | [Service] | ||
+ | Restart=always | ||
+ | RestartSec=5 | ||
+ | Type=simple | ||
+ | ExecStart=-/ | ||
+ | User=x11vnc | ||
+ | Group=x11vnc | ||
+ | |||
+ | [Install] | ||
+ | WantedBy=graphical.target | ||
+ | </ | ||
+ | Создадим пользователя для запуска этого сервиса, | ||
+ | sudo useradd x11vnc --system | ||
+ | sudo touch / | ||
+ | sudo chown -R x11vnc / | ||
+ | Включаем и запускаем сервис: | ||
+ | sudo systemctl enable x11vnc.service | ||
+ | sudo systemctl start x11vnc.service | ||
+ | Проверяем статус сервиса: | ||
+ | sudo systemctl status x11vnc.service | ||
+ | |||
+ | И, наконец, | ||
+ | sudo x11vnc -storepasswd yourVNCpasswordHERE / | ||
+ | sudo chown x11vnc / | ||
+ | |||
+ | |||