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