12.05.2017 Headless Ubuntu
Boldenkov (обсуждение | вклад) (→systemd) |
Ustinov (обсуждение | вклад) (→Autorun) |
||
(не показаны 4 промежуточные версии 2 участников) | |||
Строка 32: | Строка 32: | ||
<source lang="bash"> | <source lang="bash"> | ||
− | Xvfb :1 -screen 0 1024x768x24 -fbdir /var/tmp | + | Xvfb :1 -screen 0 1024x768x24 -fbdir /var/tmp |
</source> | </source> | ||
В данной команде указано, что номер экрана DISPLAY=:1. Это нужно будет указывать при запуске программ. Если на компьютере параллельно запустить стандартный X-сервер, он будет :0 и конфликта не произойдёт. | В данной команде указано, что номер экрана DISPLAY=:1. Это нужно будет указывать при запуске программ. Если на компьютере параллельно запустить стандартный X-сервер, он будет :0 и конфликта не произойдёт. | ||
Строка 38: | Строка 38: | ||
Запустить программу с GUI-интерфейсом можно так: | Запустить программу с GUI-интерфейсом можно так: | ||
<source lang="bash"> | <source lang="bash"> | ||
− | DISPLAY=:1 ./ | + | DISPLAY=:1 ./программа |
</source> | </source> | ||
Строка 57: | Строка 57: | ||
</source> | </source> | ||
− | == | + | == Autorun == |
− | Теперь надо сделать, чтобы всё это запускалось при перезагрузке. | + | Теперь надо сделать, чтобы всё это запускалось при перезагрузке. Сначала делаем запуск '''Xfvb'''. Для этого необходимо, чтобы в ''/etc/systemd/system/'' был файл '''xvfb.service''' со следующим содержанием: |
− | + | ||
− | Сначала | + | |
<source lang="bash"> | <source lang="bash"> | ||
[Unit] | [Unit] | ||
− | Description= | + | Description=Virtual Frame Buffer X Server |
− | After= | + | After=network.target |
+ | |||
[Service] | [Service] | ||
− | |||
ExecStart=/usr/bin/Xvfb :1 -screen 0 1024x768x24 -fbdir /var/tmp | ExecStart=/usr/bin/Xvfb :1 -screen 0 1024x768x24 -fbdir /var/tmp | ||
+ | |||
[Install] | [Install] | ||
WantedBy=multi-user.target | WantedBy=multi-user.target | ||
</source> | </source> | ||
− | После этого x11vnc | + | После этого делаем запуск '''x11vnc'''. Для этого необходимо, чтобы в ''/lib/systemd/system/'' был файл '''x11vnc.service''' |
<source lang="bash"> | <source lang="bash"> | ||
[Unit] | [Unit] | ||
Description=Start x11vnc at startup. | Description=Start x11vnc at startup. | ||
− | + | After=multi-user.target | |
− | + | ||
[Service] | [Service] | ||
Type=simple | Type=simple | ||
− | + | ExecStart=/usr/bin/x11vnc -display :1 -nopw -listen 192.168.0.94 -xkb | |
− | + | ||
− | + | ||
[Install] | [Install] | ||
WantedBy=multi-user.target | WantedBy=multi-user.target | ||
</source> | </source> | ||
− | + | Перезагружаем компьютер. Если всё сделано верно, то можно запускать программы и смотреть на "монитор", как описано выше. | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | '''p.s.''' Для проверки состояния запуска '''Xfvb''' необходимо ввести ''"sudo systemctl status xvfb.service"''. Должно быть примерно так: | |
− | + | [[File:Xvfb.jpg|601px]] | |
== Результат == | == Результат == |
Текущая версия на 16:49, 19 июня 2017
|
Для тестирования приёмников был выделен специальный компьютер. Предполагается, что данный компьютер будет круглосуточно гонять подключенные к нему тем или иным способом приёмники и собирать различную статистику.
И тут возникла проблема. Для работы с приёмником Piksi понадобилась программа Swift console, которая предполагает наличие графической среды. А тестовый компьютер не имеет монитора, в результате чего X-ы не запускаются.
Надо это решать.
[править] Варианты
Вариантов, на самом деле, много, и гуглятся они под запросу "X11 headless".
Наиболее прямолинейный - настроить X-сервер для работы без монитора. Для этого можно установить драйвер x11-dummy. Он подменяет физическую видеоплату и монитор, в результате чего система думает, что всё нормально, хотя монитора фактически нет.
Но с установкой этого драйвера в Ubuntu возникли непонятные сложности (он потянул за собой много всего дополнительного). В результате я пошёл другим путём.
[править] Xvfb
Программа Xvfb подменяет собой X-сервер. Описание её установки можно найти здесь: https://habrahabr.ru/sandbox/20989/
В результате её работы приложения думают, что X-сервер есть, посылают ему запросы, как обычно. Но вместо X-сервера Xvfb.
Из командной строки можно запустить так:
В данной команде указано, что номер экрана DISPLAY=:1. Это нужно будет указывать при запуске программ. Если на компьютере параллельно запустить стандартный X-сервер, он будет :0 и конфликта не произойдёт.
Запустить программу с GUI-интерфейсом можно так:
[править] x11vnc
Так, проблему с X-сервером закрыли, приложения запускаются. Но ничего не видно! Хотелось бы иметь доступ к запущенным программам через сеть. Для этого служит x11vnc - программа, транслирующая всё, что видно на экране (даже если его нет!) в сеть по протоколу VNC.
Здесь всё с делано по-простому - указано, к какому дисплею подключаться (:1), указано работать без пароля (nopw), уходить в фон (bg), указан IP-адрес данного компьютера (так надо).
После этого можно подключаться с другого компьютера с помощью клиента VNC, например, так:
[править] Autorun
Теперь надо сделать, чтобы всё это запускалось при перезагрузке. Сначала делаем запуск Xfvb. Для этого необходимо, чтобы в /etc/systemd/system/ был файл xvfb.service со следующим содержанием:
Description=Virtual Frame Buffer X Server
After=network.target
[Service]
ExecStart=/usr/bin/Xvfb :1 -screen 0 1024x768x24 -fbdir /var/tmp
[Install]
WantedBy=multi-user.target
После этого делаем запуск x11vnc. Для этого необходимо, чтобы в /lib/systemd/system/ был файл x11vnc.service
Description=Start x11vnc at startup.
After=multi-user.target
[Service]
Type=simple
ExecStart=/usr/bin/x11vnc -display :1 -nopw -listen 192.168.0.94 -xkb
[Install]
WantedBy=multi-user.target
Перезагружаем компьютер. Если всё сделано верно, то можно запускать программы и смотреть на "монитор", как описано выше.
p.s. Для проверки состояния запуска Xfvb необходимо ввести "sudo systemctl status xvfb.service". Должно быть примерно так:
[править] Результат
Результат выглядит, конечно, странно:
Программа запущена на чёрном фоне, нет никакого менеджера окно, нет ничего. Но именно это и требовалось - запустить программу по-минимуму, без загрузки всяких KDE. Если хочется запустить полноценную сессию, нужно настроить нормальный X, а потом аналогичным образом запустить x11vnc.
[ Хронологический вид ]Комментарии
Войдите, чтобы комментировать.