Я пишу сценарий для запуска изображений на целевом сервере, следующее является примером кода, взятым из сценария.
cat "$img" | ssh "beer@laika" "export DISPLAY=:0; display - && sleep 5 && wmctrl -r ImageMagick -e 0,254,600,800,560"
Целевая машина, которая действительно в состоянии отобразить изображение правильно, sleep
команда кажется выполнению прекрасного tho.
Проблема заключается на wmctrl
, не было никакого окна движущиеся операции предшествующий запуск сценария после ожидания нескольких минут, я прихожу к заключению, что команда, возможно, перестала работать.
К моему удивлению вручную движущееся окно на самом деле работало, целевая машина показывает, что окно было перемещено, и я могу, ясно видел его.
ssh beer@laika "export DISPLAY=:0; wmctrl -r ImageMagick -e 0,254,600,750,480"
Что могло быть неправильным с моей начальной настройкой? Есть ли что-нибудь, что я пропускаю?
Команда
display - && sleep 5 && wmctrl -r ImageMagick -e 0,254,600,800,560
запускается display
управляйте, ожидает его для выхода и затем работает sleep 5 && wmctrl -r ImageMagick -e 0,254,600,800,560
если статус выхода указывает на успех.
Вы, вероятно, хотите
display - & sleep 5 && wmctrl -r ImageMagick -e 0,254,600,800,560
который запускается display
в фоне оболочки затем сразу продолжает остающиеся команды.
Похоже, проблема в ssh :
ДИСПЛЕЙ и АВТОРИТЕТ
Программе X требуются две части информации, чтобы подключиться к X дисплей. (Обратите внимание, что
wmctrl
- это X-программа, даже если она обращается к окна других процессов, а не создание собственного.)
Ему нужен адрес дисплея, который обычно равен
: 0
, когда вы вошли в систему локально, или: 10
,: 11
и т. Д., Когда вы вошли в систему удаленно (но количество может меняться в зависимости от того, сколько X соединения активны). Адрес дисплея обычно указано в переменной среды DISPLAY.Требуется пароль для отображения. Пароли X-дисплея называются волшебными куки-файлами. Волшебные файлы cookie не указаны напрямую: они всегда хранятся в авторитетных файлах X, которые представляют собой набор записи формы «дисплей: 42 имеет cookie 123456». Авторитет X файл обычно указывается в переменной окружения XAUTHORITY. Если
$ XAUTHORITY
не задано, программы используют~ / .Xauthority
.
К счастью, вы можете решить эту проблему, установив несколько файлов cookie:
Чтобы копировать файлы cookie при входе в X-сессию рабочего стола, добавьте следующие строки в
~ / .xprofile
или~ / .profile
(или какой-либо другой скрипт который читается при входе в систему):case: $ DISPLAY: $ XAUTHORITY in : *:? *) XAUTHORITY = ~ / .Xauthority xauth merge "$ XAUTHORITY" ;; esac
Это краткое изложение ответа. Пожалуйста, перейдите по ссылке выше для получения всех подробностей.