Как настроить x11vnc для доступа с графическим экраном входа?


50

У меня есть сервер под управлением Ubuntu 12.10, и мне нужно иметь возможность удаленного доступа к этому серверу без входа в систему.

Я нашел много решений, но ни одно из них не работает с 12.10.

Может ли кто-нибудь дать мне пошаговые инструкции о том, как настроить x11vncзапуск в качестве службы (до входа в систему пользователя), чтобы при соединении с VNC мне был представлен графический экран входа?

Я новичок в Linux, поэтому, пожалуйста, дайте как можно больше подробностей в ваших ответах / комментариях.

Спасибо


1
Количество всех этих команд и конфигураций, которые обычный пользователь должен сделать, чтобы подключиться к экрану удаленного компьютера, просто смешно. В Windows это просто работает ... с помощью нескольких щелчков мыши, хотя функция удаленного рабочего стола работает только в дорогих выпусках. Я провел несколько часов, и все еще не мог заставить VNC запускаться автоматически. Вот почему Linux останется непопулярной ОС для обычных пользователей ... (Пожалуйста, не указывайте такие вещи, как "Linux используется в Android!" Или что-то в этом роде. Слова имеют разное значение в другом контексте. Вы знаете, что я имею в виду под Linux контекст.)
Чертовы овощи

Ответы:


43

Приведенные выше ответы решают проблему, хотя пара поправок для версий Ubuntu с systemd (15.04+) выглядит следующим образом:

  • Воспользуйтесь преимуществами новой -auth guessфункциональности в x11vnc - это помогает!
  • Обновление для systemd (не выскочка)

Запустите следующее для установки:

sudo apt-get install x11vnc
sudo x11vnc -storepasswd yourVNCpasswordHERE /etc/x11vnc.pass
# for Ubuntu 15.04+
sudo nano /lib/systemd/system/x11vnc.service
# for Ubuntu 16.10+
sudo nano /etc/systemd/system/x11vnc.service

Вставьте это в файл:

[Unit]
Description="x11vnc"
Requires=display-manager.service
After=display-manager.service

[Service]
ExecStart=/usr/bin/x11vnc -xkb -noxrecord -noxfixes -noxdamage -display :0 -auth guess -rfbauth /etc/x11vnc.pass
ExecStop=/usr/bin/killall x11vnc
Restart=on-failure
Restart-sec=2

[Install]
WantedBy=multi-user.target

Затем начните с:

sudo systemctl daemon-reload
sudo systemctl start x11vnc

И убедитесь, что служба запускается при загрузке:

sudo systemctl enable x11vnc

Ссылка на bbs.archlinux.org/viewtopic.php?id=168756 за несколько советов о параметрах «Требуется / после»
babelmonk

2
почему этот ответ не помечен как правильный ответ?
Cybex

1
Если нет отображения на всех, то один может потребоваться установить произвольное разрешение: sudo xrandr --fb 1920x1080.
Ориент

2
Это не дано, x11vnc будет работать немедленно. Было бы неплохо предоставить команду тестирования перед фиксацией службы, которая перезапускается при сбое каждые 2 секунды. Я использую lightdm и xfce4 на безголовом облачном сервере Ubuntu 17.10. Restart-secдолжно бытьRestartSec
Рэй Фосс

1
Ubuntu 18.04 также, кажется, хочет, RestartSecа не Restart-sec.
Скотт Виллек

43

Установите x11vnc:

sudo apt-get install x11vnc

Создайте пароль для вашего пользователя:

x11vnc -storepasswd

Если у вас есть ssh setup, вы можете использовать его для запуска x11vnc, предполагая, что вы уже вошли в систему, но не забудьте указать ему использовать ваш файл паролей:

x11vnc -usepw

Если вы не вошли в систему, вы получите ошибку с объяснением:

If NO ONE is logged into an X session yet, but there is a greeter login
program like "gdm", "kdm", "xdm", or "dtlogin" running, you will need
to find and use the raw display manager MIT-MAGIC-COOKIE file.
Some examples for various display managers:

 gdm:     -auth /var/gdm/:0.Xauth
          -auth /var/lib/gdm/:0.Xauth
 kdm:     -auth /var/lib/kdm/A:0-crWk72
          -auth /var/run/xauth/A:0-crWk72
 xdm:     -auth /var/lib/xdm/authdir/authfiles/A:0-XQvaJk
 dtlogin: -auth /var/dt/A:0-UgaaXa

Предполагая, что вы используете lightdm для входа в систему, вы можете решить эту проблему, вы можете запустить x11vnc с помощью команды:

sudo x11vnc -xkb -noxrecord -noxfixes -noxdamage -display :0 -auth /var/run/lightdm/root/:0 -usepw

Я не уверен, что это лучшая идея для запуска x11vnc от имени пользователя root. Может быть, кто-то мог бы отредактировать способ доступа к логину без использования sudo.

После этого вы сможете подключиться с помощью клиента vnc, такого как krdc (для KDE). Возможно, вы захотите использовать GNU Screen, чтобы поддерживать работу x11vnc без необходимости открывать сессию ssh.

Я смог понять это, используя http://ubuntuforums.org/showthread.php?t=2039022 .

Вот пример задания, которое вы можете использовать для запуска при запуске. Его нужно поместить в /etc/init/x11vnc.conf. (Обратите внимание, что в более новых версиях Ubuntu используется systemd, поэтому посмотрите другой ответ с примером конфигурации systemd):

# description "start and stop x11vnc"

description "x11vnc"

start on runlevel [2345]
stop on runlevel [^2345]

console log
#chdir /home/
#setuid 1000
#setgid 1000

respawn
respawn limit 20 5

exec x11vnc -xkb -noxrecord -noxfixes -noxdamage -display :0 -auth /var/run/lightdm/root/:0 -usepw

Создав этот файл, вы можете запустить его, выполнив: sudo start x11vnc. Вы можете проверить журнал по адресу: /var/log/upstart/x11vnc.log.


1
Вы можете работать x11vncкак обычный пользователь, без проблем. Например: ssh к хосту и запуск x11vnc -safer -forever -display :0 2>&1 &в сеансе tmux (хорошая практика), он будет работать под $USER.
Терри Ван

Кроме того , только для справки, чтобы изменить окно просмотра: superuser.com/questions/270608/...
Wtower

2
Это не объясняет, как
настроить

1
Смотрите здесь полный список параметров x11vnc. Мне потребовалось много времени, чтобы найти это: karlrunge.com/x11vnc/x11vnc_opts.html
Габриэль Стейплс

1
И посмотрите здесь отличный учебник по настройке этого на Raspberry Pi с автоматическим запуском при загрузке: megaleecher.net/Raspberry_Pi_VNC_Setup
Габриэль Стейплс

14

Вот как:

  1. Установите сервер X11VNC (или через Центр программного обеспечения Ubuntu -> Сервер X11VNC)

    sudo apt-get install x11vnc
    
  2. Создайте файл паролей VNC.

    sudo x11vnc -storepasswd yourVNCpasswordHERE /etc/x11vnc.pass
    
  3. Создайте файл задания в редакторе nano (или gedit, leafpad и т. Д.).

    sudo nano /etc/init/x11vnc.conf
    
  4. Вставьте это в файл:

    start on login-session-start
    
    script
    
    /usr/bin/x11vnc -xkb -forever -auth /var/run/lightdm/root/:0 -display :0 -rfbauth /etc/x11vnc.pass -rfbport 5900 -bg -o /var/log/x11vnc.log
    
    end script
    
  5. Сохраните файл. Вы создали задание для события Upstart login-session-start .

  6. Перезапустите Ubuntu.

Это оно! Теперь вы сможете подключиться к любому клиенту VNC еще до входа в систему.


Но как заставить его работать, когда lightdm не создает файл аутентификации, пока не подключен монитор?
LovesTha

@didibus Я пытался сделать это в Lubuntu, но x11vncне запускается автоматически каждый раз. Это даже не начнется как услуга, в этом отношении. Синтаксис файла правильный, и я могу начать x11vncс оболочки просто отлично. Чего мне не хватает?
linuxgringo

Это работает на Lubuntu тоже. В частности, версия Lubuntu для Banana Pi от LeMaker.
AaronD

3

babelmonks отвечают как скрипт bash, копируют и сохраняют как x11vnc.sh и запускают с помощью sudo bash /path/to/file/x11vnc.sh (извините, у вас недостаточно представителей для добавления комментария)

#!/bin/bash
#install x11vnc & set password
apt-get install x11vnc -y
x11vnc -storepasswd 123456 /etc/x11vnc.pass
#create config file for  system service
cat > /lib/systemd/system/x11vnc.service <<-EOF
[Unit]
Description="x11vnc"
Requires=display-manager.service
After=display-manager.service

[Service]
 ExecStart=/usr/bin/x11vnc -xkb -noxrecord -noxfixes -noxdamage -display :0 -auth guess -rfbauth /etc/x11vnc.pass
ExecStop=/usr/bin/killall x11vnc

[Install]
WantedBy=multi-user.target
EOF
#restart new services &  enable on boot
systemctl daemon-reload
systemctl start x11vnc
systemctl enable x11vnc

Если вы хотите улучшить другой ответ, предложите отредактировать его и не создавайте новый ответ.
Дэвид Фёрстер

Я с радостью добавлю это в мой, если вы хотите создать edit @ nix-badweasel
babelmonk


1

Вот конфиг работает для sddm(для KDE 5). В настоящее время -auth guessне работает для sddm, файл аутентификации каждый раз отличается, поэтому нам нужно что-то вроде -auth /var/run/sddm/*. Сервис выглядит так,

[Unit]
Description="x11vnc"
After=multi-user.target

[Service]
ExecStart=/bin/sh -c "/usr/bin/x11vnc -xkb -noxrecord -display :0 -auth /var/run/sddm/* -rfbauth /etc/x11vnc.pass"
ExecStop=/usr/bin/killall x11vnc

[Install]
WantedBy=multi-user.target

Я должен поставить его после multi-user.target, если после display-manager.service, x11vncне может найти файл аутентификации, может быть, sddmгенерирует файл аутентификации позже. Это проверено на Manjaro 18.


0

Я использую свою собственную оболочку: https://github.com/dvdvideo1234/UbuntuBatches/tree/master/x11VNC

start on login-session-start

script

sudo /usr/bin/x11vnc -xkb -auth /var/run/lightdm/root/:0 -noxrecord -noxfixes -noxdamage -rfbauth /var/srv/x11vnc/x11vnc.pass -forever -bg -rfbport <your_port> -o /var/srv/x11vnc/x11vnc.log

end script

в файл:

/etc/init/x11vnc.conf

Он автоматически запускается при загрузке, даже на экране входа в систему запрашивает пароль.


0

Установить пакет x11vnc

#sudo apt-get install x11vnc

Затем установите пароль

#x11vnc -usepw

Затем создайте сценарий запуска для x11vnc

#sudo nano /etc/x11vnc.sh

В файле:

/usr/bin/x11vnc -bg -forever -shared -reopen -usepw

Затем сохранить

#sudo chmod 777 /etc/x11vnc.sh

Затем добавьте файл сценария в Центр управления => Запуск приложения, затем нажмите Добавить

> Name-----------x11vnc

> Command-----<map the script file

> Comment------service

Это должно быть необходимо добавить для всех пользователей

Это будет работать только после входа пользователя

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.