Автозапуск TightVncServer на Raspberry Pi 2

11

У меня Raspberry Pi 2, и я следил за публикацией на Raspberrypi.org, но Tight VNC Server не запускается при перезагрузке. Там, кажется, нет никакой ошибки.

Как заставить TightVncServer запускаться при перезагрузке Pi?

зарин
источник
Пока не могу опубликовать ответ, но есть простой метод, с которым я начал работать над своим пи 3 B, задокументированным на adafruit здесь: learn.adafruit.com/…
Стивен Эверс

Ответы:

10

Для этого вы можете использовать немного ловкости Linux.

Нашей первой задачей будет редактирование файла /etc/rc.local. Этот файл может содержать команды, которые запускаются при запуске. Если мы посмотрим на файл, то увидим, что там уже мало записей;

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi

exit 0

Первый набор строк с хеш-знаком (#) перед ними - комментарии. Это просто чтобы объяснить, что происходит с кем-то, кто читает файл.

Строки кода внизу явно связаны с IP-адресом компьютера. На самом деле это короткий скрипт, который проверяет, есть ли у Raspberry Pi IP-адрес, и если он есть, он распечатывает его. Если вы помните, вы можете увидеть IP-адрес, распечатанный на экране, когда Pi загружается так

My IP address is 10.1.1.8

Raspbian GNU/Linux 7 raspberrypi tty1

raspberrypi login:

Этот фрагмент скрипта в rc.local является кодом, отвечающим за распечатку IP-адреса!

Мы добавим следующую команду в rc.local;

su - pi -c '/usr/bin/tightvncserver :1'

Эта команда переключает пользователя на пользователя 'pi' с su - pi. Су означает «смена пользователя», тире (-) гарантирует, что среда пользователя Пи (как и все их настройки) используется правильно, а ПИ - пользователь.

Опция -c объявляет, что следующая часть строки будет командой, которая будет выполняться, а часть внутри кавычек ('/ usr / bin /лотvncserver: 1') является командой.

В этом случае команда запускает файлightvncserver, который находится в каталоге / usr / bin, и указывает, что мы должны запустить сеанс рабочего стола 1 (: 1).

Для этого мы отредактируем файл rc.local с помощью следующей команды;

sudo nano /etc/rc.local

Добавьте в наши строки, чтобы файл выглядел следующим образом;

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi

# Start tightvncserver
su - pi -c '/usr/bin/tightvncserver :1'

exit 0

(Мы также можем добавить наш собственный комментарий в файл, чтобы будущие читатели знали, что происходит)

Это должно быть так. Теперь вы сможете проверить, что служба запускается при загрузке Pi при перезагрузке.

Если вышесказанное звучит немного затянуто, не стесняйтесь проверить более полную аргументацию здесь .

d3noob
источник
У меня не работает.
Хамелеон
Ответ был написан для версии Raspbian «Wheezy». Более поздняя версия ('Jessie' и (я предполагаю) 'Stretch') имеет другой метод по умолчанию. Смотрите здесь для альтернативного подхода.
d3noob
5

Перед началом убедитесь, что ваш Pi подключен к интернету \ сети через Ethernet \ wifi.

Откройте Терминал и введите следующие команды:

Получить Pi IP-адрес для удаленного подключения (для использования позже)

hostname -I

Установить TightVncServer

sudo apt-get update
sudo apt-get install tightvncserver
tightvncserver

При первом запуске вы должны ввести пароль и подтвердить его. Нет необходимости вводить пароль только для просмотра.

Чтобы настроить автоматический запуск в качестве службы при загрузке Pi:

Откройте nano (текстовый редактор), чтобы создать файл для автоматического запуска Tight VNC Server sudo nano /etc/init.d/tightvncserver

Введите следующее (или скопируйте и вставьте ):

#!/bin/sh
# /etc/init.d/tightvncserver
# Set the VNCUSER variable to the name of the user to start tightvncserver under
VNCUSER='pi'
case "$1" in
  start)
    su $VNCUSER -c '/usr/bin/tightvncserver :1'
    echo "Starting TightVNC server for $VNCUSER"
    ;;
  stop)
    pkill Xtightvnc
    echo "Tightvncserver stopped"
    ;;
  *)
    echo "Usage: /etc/init.d/tightvncserver {start|stop}"
    exit 1
    ;;
esac
exit 0

Нажмите Ctrl + x, затем y, чтобы сохранить, и Enter, чтобы сохранить то же имя файла.

Отредактируйте разрешения этого файла, чтобы сделать его исполняемым и активным:

sudo chmod 755 /etc/init.d/tightvncserver
sudo update-rc.d tightvncserver defaults

Перезагрузка для проверки перезагрузки sudo

Установите клиент vnc для вашей ОС и попробуйте подключиться после перезагрузки Pi!

Для Windows: клиент TightVNC, например . Нет необходимости устанавливать сервер.

Запустите VNC Client Connect, используя IP-адрес в верхней части этого поста. Измените IP-адрес на ваш. Номер порта в ряде интернет-сообщений указан только в виде 2 цифр. Это короткая рука, и если вы используете вышеописанный скрипт, ваш pi работает на порту 1, то вы должны использовать 590 1 . Если 2, то 590 2 и т. Д.

192.168.1.123:5901
зарин
источник
Ваше решение работает идеально для меня, за исключением того, что я не получаю полный экран. Как я могу получить полный экран? ( vncserver -geometry 1366x768 -depth 24 -dpi 96Я использовал эту команду раньше, чтобы получить полноэкранный режим. Есть ли способ добавить строку в ваш код?)
opu 웃
@opu 웃 Строка su $VNCUSER -c '/usr/bin/tightvncserver :1'- это то, что запускает команду, на которую вы ссылаетесь. Просто добавьте параметры в конец этой строки, что приведет к чему-то вродеsu $VNCUSER -c '/usr/bin/tightvncserver :1' -geometry 1366x768 -depth 24 -dpi 96
Трент
Как мне отладить, если это не работает? Если я запустил silentvncserver в командной строке пользователя pi, он запустится, и я смогу удаленно войти, но не запускается автоматически при использовании этого или решения /etc/rc.local.
Алан МакДонли,