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

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

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

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

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

1 ответ1

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 чтобы найти значение его XAUTHORITY envvar.

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