1

Я не уверен, что задаю правильный вопрос, поэтому вот что я на самом деле хочу сделать:

У меня есть сервер, к которому подключен экран, и нет других устройств. Это работает SSH сервер.

Я бы хотел, чтобы Алиса смогла подключиться к серверу и запустить команду от имени "персонала", чтобы показать картинку на экране. Например...

ssh server sudo -u 'staff' gst-launch-1.0 playbin uri=file:///path/to/image.png

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

ssh server sudo -u 'staff' gst-launch-1.0 playbin uri=file:///path/to/other.png

Как X-сервер должен быть запущен и настроен для удовлетворения моих потребностей? Только "штатный" пользователь должен будет манипулировать дисплеем.

Я знаю, что могу запустить сервер при загрузке с помощью xinit и запустить программу по своему выбору. Какую программу я должен запустить? Что это должно сделать? Существуют ли переменные окружения, которые мне нужно будет передать?

2 ответа2

1

В обычной среде Linux X-сервер использует протокол MIT-MAGIC-COOKIE-1 для авторизации доступа к дисплею. Любой пользователь, который хочет получить доступ к дисплею, должен иметь правильный файл cookie (обычно хранится в ~/.Xauthority file). Обычно cookie генерируется диспетчером отображения (экран входа в систему). Если вы запускаете X-сервер из своих пользовательских сценариев, вы должны сами сгенерировать cookie-файл, сохранить его в авторитетном файле и сообщить серверу об этом файле.

Вы можете использовать команду mcookie чтобы сгенерировать cookie и добавить его в файл полномочий с помощью xauth:

# touch /home/staff/.Xauthority
# xauth -f /home/staff/.Xauthority add :0 . $(mcookie)

Prameter -f /home/staff/.Xauthority указывает xauth использовать файл авторизации штатного пользователя. :0 это отображаемое имя. Точка (.) Указывает протокол MIT-MAGIC-COOKIE-1. mcookie из пакета util-linux .

Теперь, если вы выполните:

# xauth -f /home/staff/.Xauthority list

вы должны увидеть что-то вроде:

server/unix:0  MIT-MAGIC-COOKIE-1  c61bdc0b88cf0cb376e1b29647a8c4d6

Когда вы входите в систему как штатный пользователь, вы должны увидеть тот же вывод без параметра -f:

$ xauth list
server/unix:0  MIT-MAGIC-COOKIE-1  c61bdc0b88cf0cb376e1b29647a8c4d6

Если нет, проверьте, что переменная среды XAUTHORITY либо не определена, либо имеет значение "/home/staff/.Xauthority».

Запустите X-сервер с параметром -auth :

# X -auth /home/staff/.Xauthority

Теперь пользователь может получить доступ персонала на :0 Осталось только установить переменную окружения DISPLAY - это можно сделать с помощью параметра sudo . Поэтому, когда вы подключаетесь к серверу по ssh и выполняете команду, которая показывает изображение как штатный пользователь, оно должно отображаться. Используя ImageMagick, как было предложено Л. Леврелом, команда будет выглядеть так:

# ssh server sudo -u staff DISPLAY=:0 display -window root /path/to/image.png

Обратите внимание, что вы не должны использовать персонал пользователя. Вы можете создать файл полномочий в общем месте (например, /var /tmp /xauthority) и установить переменную окружения XAUTHORITY для Алисы и Боба по этому пути.

Другой альтернативой является "распространение" куки-файла в файлы авторизации Алисы и Боба (на самом деле это похоже на то, что делают менеджеры дисплея):

# xauth -f /var/tmp/xauthority extract - :0 | xauth -f /home/alice/.Xauthority merge
# xauth -f /var/tmp/xauthority extract - :0 | xauth -f /home/bob/.Xauthority merge

Таким образом, Алисе и Бобу не нужно использовать sudo staff для доступа к дисплею.

Обратите внимание: если у вас запущено больше серверов X, вы должны использовать другое отображаемое имя, отличное от :0 в приведенных выше командах (например :1 :2 и т.д.).

0

Если у вас установлен ImageMagick, вы можете использовать:

display -window root /path/to/image.png

Смотрите документацию. Есть много вариантов. Вам, вероятно, понадобится хотя бы -display .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .