Давным-давно,
DISPLAY=:0.0 totem /path/to/movie.avi
после того, как ssh вошел в мой рабочий стол с моего ноутбука, тотем играл movie.avi
на моем рабочем столе.
Теперь выдает ошибку:
No protocol specified Cannot open display:
Я переустановил Debian squeeze, когда он стал стабильным на обоих компьютерах, и, думаю, я сломал конфиг.
Я погуглил по этому вопросу и не могу понять, что я должен делать.
(VLC имеет HTTP-интерфейс, который работает, но он не так удобен, как ssh.)
Та же проблема возникает, когда я пытаюсь запустить это из задания cron.
totem
не нашли свой X cookie, и вам нужно установитьXAUTHORITY
правильное значение, то есть значение в вашей обычной сессии на рабочем столе. Прочитайте Linux: wmctrl не может открыть дисплей, когда сеанс инициируется через ssh + screen для некоторого фона; см. также соответствующий ответ. Как пользователь root может запустить графическую программу на рабочем столе другого пользователя? ,$XAUTHORITY
на~/.Xauthority
как все ожидают , что это будет.Ответы:
(Адаптировано из Linux: wmctrl не может открыть дисплей, когда сеанс инициируется через ssh + screen )
ОТОБРАЖЕНИЕ и ВЛАСТЬ
Программе X требуется две части информации для подключения к дисплею X.
Требуется адрес дисплея, который обычно отображается
:0
при локальном входе в систему или:10
,:11
и т. Д. При удаленном входе в систему (но число может меняться в зависимости от того, сколько активных X-соединений). Адрес дисплея обычно указывается вDISPLAY
переменной окружения.Требуется пароль для отображения. Пароли X-дисплея называются волшебными куки . Магические куки не указываются напрямую: они всегда хранятся в X авторитетных файлах, которые представляют собой набор записей вида «на дисплее
:42
есть куки123456
». Файл полномочий X обычно указывается вXAUTHORITY
переменной среды. Если$XAUTHORITY
не установлено, программы используют~/.Xauthority
.Вы пытаетесь воздействовать на окна, которые отображаются на вашем рабочем столе. Если вы единственный пользователь, использующий ваш настольный компьютер, вполне вероятно, что отображаемое имя -
:0
. Найти местоположение авторитетного файла X сложнее, потому что с gdm, настроенным в Debian squeeze или Ubuntu 10.04, он находится в файле со случайно сгенерированным именем. (У вас не было проблем раньше, потому что в более ранних версиях gdm использовались настройки по умолчанию, то есть файлы cookie, хранящиеся в~/.Xauthority
.)Получение значений переменных
Вот несколько способов получить значения
DISPLAY
иXAUTHORITY
:Вы можете систематически запускать сеанс экрана со своего рабочего стола, возможно, автоматически в сценариях входа в систему (из
~/.profile
; но делать это только при входе в систему под X: test ifDISPLAY
имеет значение, начинающееся с:
(которое должно охватывать все вероятные случаи) встретить)). В~/.profile
:Затем в сеансе SSH:
Вы также можете сохранить значения
DISPLAY
иXAUTHORITY
в файле и вызвать их. В~/.profile
:В сеансе SSH:
Вы можете обнаружить значения
DISPLAY
иXAUTHORITY
из запущенного процесса. Это сложнее автоматизировать. Вы должны выяснить PID процесса, который подключен к дисплею, с которым вы хотите работать, а затем получить переменные среды из/proc/$pid/environ
(eval export $(</proc/$pid/environ tr \\0 \\n | grep -E '^(DISPLAY|XAUTHORITY)=')
¹).Копирование куки
Другой подход (следуя предложению Arrowmaster ) состоит в том, чтобы не пытаться получить значение
$XAUTHORITY
в сеансе ssh, а вместо этого заставить сеанс X копировать свои куки в~/.Xauthority
. Поскольку файлы cookie генерируются каждый раз при входе в систему, это не проблема, если вы сохраняете устаревшие значения~/.Xauthority
.Может быть проблема безопасности, если ваш домашний каталог доступен через NFS или другую сетевую файловую систему, что позволяет удаленным администраторам просматривать его содержимое. Им все равно нужно каким-то образом подключаться к вашей машине, если вы не включили X TCP-соединения (по умолчанию в Debian они отключены). Таким образом, для большинства людей это либо не применяется (без NFS), либо не является проблемой (без подключений X TCP).
Чтобы скопировать файлы cookie при входе в сеанс X рабочего стола, добавьте следующие строки в
~/.xprofile
или~/.profile
(или другой сценарий, который читается при входе в систему):¹ В принципе это не хватает собственно цитирования, но в данном конкретном случае ,
$DISPLAY
и$XAUTHORITY
не будет содержать какой - либо оболочку метасимвола.источник
~/.xprofile
который должен запускаться только во время входа в систему X, и создать / обновить его~/.Xauthority
с правильной информацией. Будет ли достаточно символической ссылки?~/.Xauthority
.xauth extract - $DISPLAY | xauth -f "$HOME/.Xauthority" merge -
в~/.xprofile
случае с несколькими $ DISPLAY?Я решил эту проблему, добавив
к
~/.xprofile
. Я не знаю, является ли это полностью безопасным (мне было бы очень интересно услышать, что думают более знающие люди), но я предполагаю, что это намного лучше, чем отключение контроля доступа (сxhost +
), как обычно предлагается, когда вы Google для этой проблемы.источник
localuser
интерпретируемые сервером адреса полностью защищены. Debian даже делает это по умолчанию как часть процесса входа в систему (in/etc/X11/Xsession.d/35x11-common_xhost-local
). См. Справочную страницу Xsecurity для более подробной информации.xhost +
вероятно, достаточно в большинстве случаев ...xhost(1)
ИXsecurity(7)
для документов). Сама по себе эта команда не разрешает какой-либо удаленный доступ или пересылку X11 (для которой обычно предпочтительнее механизм «магических cookie»xhost
).Тебе следует
export DISPLAY=:0.0
источник
У меня работает, debian wheezy -> Ubuntu Trusty.
Примечание: в этом случае на сервере не запущен менеджер дисплеев, это виртуальная машина без головы без подключенной графической карты или монитора.
X дисплей на ноутбуке показывает вывод xterm на сервере.
Отладка с использованием:
strace
будет проливать кучу кровавых подробностей о том, что он делает, вы должны быть в состоянии угадать, где он застрял - ожидание соединения или что-то еще.В одну строчку ..
источник