Не могу избавиться от вывода x11vnc.

Вопрос или проблема

Я на системе Ubuntu, у которой на дисплее :0 настроен сенсорный экран. Я хотел иметь возможность удаленно управлять этим сенсорным экраном с Windows, поэтому я настроил x11vnc. Он работает отлично. Но вот настройка:

У меня два пользователя (исключая root). Один ограниченный пользователь (практически без разрешений и без пароля), который автоматически входит на сенсорный экран, и один полностью настроенный пользователь с сложным паролем, правами sudo и т. д. Мне действительно важно только запустить x11vnc, когда ограниченный пользователь входит в систему (сенсорный экран становится активным), поэтому я вставил команду x11vnc -loop & в конце файла /home/restricted/.profile. Работает хорошо. Имейте в виду, что это должно быть фоновым процессом, потому что есть другие команды, которые этот пользователь должен выполнять (скрытые от человека) позже.

Проблема, с которой я сталкиваюсь, заключается в том, что x11vnc очень шумный с его выводом. Особенно если вы не используете пароль (а я не использую), и это цикл, поэтому он просто продолжает повторяться. Обычно это не было бы проблемой, но не только перенаправление вывода в /dev/null не работает (объяснено ниже), но и вывод появляется на терминале другого пользователя, когда я входу в него через ssh (что действительно раздражает, потому что я использую эту учетную запись для обслуживания, и ничего сделать невозможно, когда ваш экран заполняется выводом какого-то фонового процесса. Вот пример вывода, который я получаю:

--- x11vnc loop: 1 ---

--- x11vnc loop: waiting for: 1551

###############################################################
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#
#@                                                           @#
#@  **  WARNING  **  WARNING  **  WARNING  **  WARNING  **   @#
#@                                                           @#
#@        YOU ARE RUNNING X11VNC WITHOUT A PASSWORD!!        @#
#@                                                           @#
#@  This means anyone with network access to this computer   @#
#@  may be able to view and control your desktop.            @#
#@                                                           @#
#@ >>> If you did not mean to do this Press CTRL-C now!! <<< @#
#@                                                           @#
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#
#@                                                           @#
#@  You can create an x11vnc password file by running:       @#
#@                                                           @#
#@       x11vnc -storepasswd password /path/to/passfile      @#
#@  or   x11vnc -storepasswd /path/to/passfile               @#
#@  or   x11vnc -storepasswd                                 @#
#@                                                           @#
#@  (the last one will use ~/.vnc/passwd)                    @#
#@                                                           @#
#@  and then starting x11vnc via:                            @#
#@                                                           @#
#@      x11vnc -rfbauth /path/to/passfile                    @#
#@                                                           @#
#@  an existing ~/.vnc/passwd file from another VNC          @#
#@  application will work fine too.                          @#
#@                                                           @#
#@  You can also use the -passwdfile or -passwd options.     @#
#@  (note -passwd is unsafe if local users are not trusted)  @#
#@                                                           @#
#@  Make sure any -rfbauth and -passwdfile password files    @#
#@  cannot be read by untrusted users.                       @#
#@                                                           @#
#@  Use x11vnc -usepw to automatically use your              @#
#@  ~/.vnc/passwd or ~/.vnc/passwdfile password files.       @#
#@  (and prompt you to create ~/.vnc/passwd if neither       @#
#@  file exists.)  Under -usepw, x11vnc will exit if it      @#
#@  cannot find a password to use.                           @#
#@                                                           @#
#@                                                           @#
#@  Even with a password, the subsequent VNC traffic is      @#
#@  sent in the clear.  Consider tunnelling via ssh(1):      @#
#@                                                           @#
#@    http://www.karlrunge.com/x11vnc/#tunnelling            @#
#@                                                           @#
#@  Or using the x11vnc SSL options: -ssl and -stunnel       @#
#@                                                           @#
#@  Please Read the documention for more info about          @#
#@  passwords, security, and encryption.                     @#
#@                                                           @#
#@    http://www.karlrunge.com/x11vnc/faq.html#faq-passwd    @#
#@                                                           @#
#@  To disable this warning use the -nopw option, or put     @#
#@  'nopw' on a line in your ~/.x11vncrc file.               @#
#@                                                           @#
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#
###############################################################
20/05/2016 10:53:18 x11vnc version: 0.9.13 lastmod: 2011-08-10  pid: 1551
20/05/2016 10:53:18 XOpenDisplay("") failed.
20/05/2016 10:53:18 Trying again with XAUTHLOCALHOSTNAME=localhost ...
20/05/2016 10:53:18
20/05/2016 10:53:18 *** XOpenDisplay failed. No -display or DISPLAY.
20/05/2016 10:53:18 *** Trying ":0" in 4 seconds.  Press Ctrl-C to abort.
20/05/2016 10:53:18 *** 1 2 3 4
Invalid MIT-MAGIC-COOKIE-1 key20/05/2016 10:53:22 XOpenDisplay(":0") failed.
20/05/2016 10:53:22 Trying again with XAUTHLOCALHOSTNAME=localhost ...
Invalid MIT-MAGIC-COOKIE-1 key20/05/2016 10:53:22 XOpenDisplay(":0") failed.
20/05/2016 10:53:22 Trying again with unset XAUTHLOCALHOSTNAME ...
Invalid MIT-MAGIC-COOKIE-1 key20/05/2016 10:53:22

20/05/2016 10:53:22 ***************************************
20/05/2016 10:53:22 *** XOpenDisplay failed (:0)

*** x11vnc was unable to open the X DISPLAY: ":0", it cannot continue.
*** There may be "Xlib:" error messages above with details about the failure.

Некоторые советы и рекомендации:

** Сервер X (тот, который вы хотите просмотреть) должен работать перед запуском x11vnc: x11vnc не запускает X сервер. (тем не менее, смотрите опцию -create, если это именно то, что вы действительно хотите).

** Вы должны использовать -display <disp>, -ИЛИ- установить и экспортировать вашу окружение $DISPLAY, чтобы ссылаться на дисплей желаемого X сервера. 
 - Обычно дисплей просто ":0" (фактически x11vnc использует это, если вы забудете указать), но в некоторых многопользовательских ситуациях он может быть ":1", ":2" или даже ":137". Спросите вашего администратора или гуру, если у вас есть трудности с определением, каким является ваш X DISPLAY.

** Далее, вам нужно иметь достаточные разрешения (Xauthority) для подключения к X DISPLAY. Вот некоторые советы:

 - Обычно вам просто нужно запустить x11vnc от имени пользователя, вошедшего в X сессию. Так что убедитесь, что вы этот пользователь, когда вводите x11vnc.
 - Быть root обычно недостаточно, потому что может быть доступен неправильный файл MIT-MAGIC-COOKIE. Файл cookie содержит секретный ключ, который позволяет x11vnc подключаться к нужному X DISPLAY.
 - Вы можете явно указать, какой файл MIT-MAGIC-COOKIE следует использовать с помощью опции -auth, например:
       x11vnc -auth /home/someuser/.Xauthority -display :0
       x11vnc -auth /tmp/.gdmzndVlR -display :0
   у вас должны быть права на чтение для файла auth.
   См. также '-auth guess' и '-findauth', обсуждаемые ниже.

** Если НИКТО еще не вошел в X сессию, но работает программа приветствия, такая как "gdm", "kdm", "xdm" или "dtlogin", вам нужно будет найти и использовать необработанный файл MIT-MAGIC-COOKIE менеджера дисплея.
   Некоторые примеры для различных менеджеров дисплея:

     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

   В некоторых случаях команда "ps wwwwaux | grep auth" может раскрыть расположение файла.

   Начиная с x11vnc 0.9.9, вы можете заставить его попытаться угадать, используя:

              -auth guess

   (см. также опцию x11vnc -findauth.)

   Только root будет иметь права на чтение этого файла, и поэтому x11vnc должен запускаться от имени root (или копировать его). Случайные символы в именах файлов, разумеется, будут изменяться, и директория, в которой расположен файл cookie, зависит от системы.

Смотрите также: http://www.karlrunge.com/x11vnc/faq.html

 --- x11vnc loop: sleeping 2000 ms ---

 --- x11vnc loop: 2 ---

И это просто повторяется снова и снова.

Он кричит мне о том, что не может открыть дисплей, но он работает. Я предполагаю, что это потому, что ограниченный пользователь уже выполнил эту команду, и она подключилась нормально, но теперь этот пользователь пытается сделать это тоже, поэтому он не может подключиться.

Почему это происходит? Очевидно, что в моем понимании есть какая-то дыра. Вот разные вещи, которые я попробовал:


Перенаправление вывода в /dev/null

В том же месте, /home/restricted/.profile я пытался заменить существующую команду x11vnc -loop & на x11vnc -loop > /dev/null 2>&1 &.

Это не дало никакого эффекта, вывод по-прежнему был на терминале другого пользователя и (очевидно) не исчез.


Запуск команды с nohup

Снова в /home/restricted/.profile, я попытался заменить существующую команду x11vnc -loop & на nohup x11vnc -loop &.

Снова это не дало никакого эффекта. Вывод все еще был там. Nohup даже не создал файл nohup.out. По крайней мере, я не смог его найти.

Для завершения, я также попробовал nohup x11vnc -loop > /dev/null 2>&1 &, снова ничего не изменилось.


Запуск x11vnc как демона

Здесь я начал понимать, что делаю что-то не так. Я решил, что, возможно, это потому, что /home/restricted/.profile — это не то место, чтобы помещать такую вещь. Поэтому я создал скрипт в /etc/init.d, который будет запускаться при загрузке, и создал ссылку с update-rc.d согласно примеру скелетного файла.

Снова x11vnc заработал, но вывод был на всех моих терминалах.


Запуск x11vnc в screen

Моя последняя попытка исправить эту ситуацию заключалась в том, чтобы бросить команду в сеанс screen. Screen обычно исправляет такие проблемы для меня… Но не в этот раз.

В /home/restricted/.profile я заменил x11vnc -loop & на screen -d -R x11vnc x11vnc -loop

На этот раз x11vnc больше не работал (не удавалось подключиться через Windows клиент), но вывод все еще был на всех терминалах.


Снова, очевидно, что есть что-то, что я не понимаю, либо о x11vnc, либо о запуске процесса при загрузке.

Как вы могли заметить из вышесказанного, я уже некоторое время занимаюсь устранением неполадок и не могу найти ничего другого в Интернете по этому поводу. Поэтому помощь здесь будет отличной. Заранее спасибо.

Перенаправление вывода с помощью >& сработало для меня.

x11vnc -repeat -noxdamage -ncache 10 -forever -loop -rfbauth &> x11vnc.log

Ответ или решение

Проблема с выводом x11vnc на терминал, как вы описали, может быть решена несколькими способами. Давайте обсудим детали и альтернативные подходы для устранения этой неприятности, чтобы ваш опыт работы с удалённым контролем стал более комфортным.

Понимание проблемы

x11vnc генерирует значительный объём вывода, особенно в крутящемся (loop) режиме. Этот вывод появляется не только в терминале пользователя, который запускает процесс, но и в терминалах других пользователей, что, как вы заметили, мешает работе. Основная задача заключается в том, чтобы перенаправить этот вывод в другое место, например, в файл, чтобы он не мешал нормальному использованию системы.

Решения

1. Запуск x11vnc в фоновом режиме с правильным перенаправлением вывода

Вы уже пробовали несколько методов перенаправления вывода. Обратите внимание, что перенаправление с помощью >& должно работать, если всё организовано правильно. Пример команды может выглядеть так:

x11vnc -loop > /dev/null 2>&1 &

Убедитесь, что вы добавляете & в конце команды, чтобы процесс не блокировал выходной поток. Однако, если это не дало результатов, попробуйте перенаправить вывод в файл для анализа.

x11vnc -loop > /home/restricted/x11vnc.log 2>&1 &

Изучив файл x11vnc.log, вы сможете лучше понять, от чего именно происходит вывод.

2. Использование nohup

Вы также пробовали nohup, но убедитесь, что вы используете его правильно. Важно, чтобы nohup не игнорировал выходной поток. Попробуйте следующую команду:

nohup x11vnc -loop > /dev/null 2>&1 &

После выполнения проверьте файл nohup.out, который находится в вашем текущем каталоге, и убедитесь, что его содержимое пустое или имеет только необходимый вывод.

3. Настройка службы

Создание службы для управления процессом x11vnc — это хороший подход. Пример файла службы может выглядеть так:

[Unit]
Description=Start x11vnc at startup
After=display-manager.service

[Service]
Type=simple
User=restricted
ExecStart=/usr/bin/x11vnc -display :0 -loop -noxdamage -forever -rfbauth /home/restricted/.vnc/passwd > /dev/null 2>&1
Restart=always

[Install]
WantedBy=graphical.target

После создания файла службы (например, /etc/systemd/system/x11vnc.service), выполните следующие команды:

sudo systemctl enable x11vnc.service
sudo systemctl start x11vnc.service

Это обеспечит автоматический запуск x11vnc при старте системы без вывода на терминал.

Заключение

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

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

Оцените материал
Добавить комментарий

Капча загружается...