Я запускаю процесс с помощью init.d и хочу иметь возможность создавать приложения с графическим интерфейсом в качестве дочерних процессов.
Из-за раннего запуска этого процесса переменные окружения DISPLAY и XAUTHORITY не установлены.
Я могу просто установить DISPLAY на: 0.0, который работает нормально. Однако у меня больше проблем с переменной XAUTHORITY.
Я мог бы просто установить XAUTHORITY, чтобы он указывал на файл .XAuthority в домашнем каталоге пользователя - но он не существует. Вместо этого при обычном входе в X-сессию переменная XAUTHORITY устанавливается на некоторый файл в / var / run / gdm / и имеет, казалось бы, случайное имя пользователя.
Как root, могу ли я просто создать новый cookie для себя?
xauth add
Ответы:
Вы не можете сгенерировать новый файл cookie: файл cookie - это «секретный пароль», который серверу сообщили при запуске и который все клиенты должны знать для подключения.
Я думаю, что вы можете получить то, что вы хотите с чем-то вроде
Это работает путем поиска процесса 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.источник