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

327

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

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

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

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

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

0
Используйте `xauth add` ssnobody 9 лет назад 0

1 ответ на вопрос

1
Stefan

Вы не можете сгенерировать новый файл 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.