Принудительная аутентификация XWindows


0

Я запускаю процесс с помощью init.d и хочу иметь возможность создавать приложения с графическим интерфейсом в качестве дочерних процессов.

Из-за раннего запуска этого процесса переменные окружения DISPLAY и XAUTHORITY не установлены.

Я могу просто установить DISPLAY на: 0.0, который работает нормально. Однако у меня больше проблем с переменной XAUTHORITY.

Я мог бы просто установить XAUTHORITY, чтобы он указывал на файл .XAuthority в домашнем каталоге пользователя - но он не существует. Вместо этого при обычном входе в X-сессию переменная XAUTHORITY устанавливается на некоторый файл в / var / run / gdm / и имеет, казалось бы, случайное имя пользователя.

Как root, могу ли я просто создать новый cookie для себя?


Использованиеxauth add
ssnobody

Ответы:


1

Вы не можете сгенерировать новый файл cookie: файл cookie - это «секретный пароль», который серверу сообщили при запуске и который все клиенты должны знать для подключения.

Я думаю, что вы можете получить то, что вы хотите с чем-то вроде

DISPLAY=:0
XAUTHORITY=$(ps auxw | sed -ne "s|.*/[X].* $DISPLAY.*-auth \\([^ ]*\\).*|\\1|p")
export DISPLAY XAUTHORITY
...

Это работает путем поиска процесса X-сервера, пытающегося найти -authпереданный ему аргумент, поскольку это должен быть файл, содержащий параметры XAUTH. Обратите внимание, что этот файл обычно (по моему опыту) будет принадлежать пользователю root, и другие пользователи не смогут его прочитать, поэтому, если вы захотите запустить приложение X, которое не запускается от имени root, вам сначала нужно скопировать это файл (как root) в другом месте и измените владельца этой копии (или, более вероятно, вы захотите перенести содержимое этого файла в файл пользователя ~/.Xauthority, используя xauth addили xauth merge).

Другой способ найти файл, в котором хранится волшебный файл cookie, - это посмотреть на среду некоторых процессов пользователя, который вошел в систему (например, gnome-shellпроцесс). Например, у psвас должна быть возможность найти идентификатор gnome-shellпроцесса (или другого пользовательского процесса, который мы ожидаем запустить в качестве X-клиента), а затем /proc/<process-id>/environmentнайти значение его envvar XAUTHORITY.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.