Я вошел в систему как пользователь A. Я хочу запустить приложение с графическим интерфейсом как пользователь B. Пользователь, не root. Пользователь B тоже локальный, не удаленный, мне нужны только разные переменные окружения. Я не хочу запускать второй X, я хочу, чтобы они были на одном дисплее. У меня нет проблем с программами, запущенными в терминале, все su - ...
работает. Для графического интерфейса есть сообщение об ошибке:
Application initialization failed: couldn't connect to display ":0.0"
или
Gtk-WARNING **: cannot open display: :0.0
Есть ли хороший способ это исправить? Статья о правильном использовании xhost
или что-то в этом роде?
решение1
Выполните следующую команду, чтобы предоставить userBname
доступ к дисплею: xhost +SI:localuser:userBname
Вы можете использовать , xhost +
чтобы предоставить доступ всем; однако это небезопасно. Лучше предоставить доступ на основе пользователя. Правильный синтаксис для записей xhosts для локальных пользователей — SI:localuser:username
.
Затем su userBname
, export DISPLAY=:0.0
, и, наконец, запустите свою программу GUI. Хотя вы ранее предоставили доступ к дисплею с помощью xhost
, вы также должны задать переменную окружения DISPLAY
, чтобы программы знали, где размещать свой графический вывод. Разрешение различных DISPLAY
переменных для разных пользователей позволяет нескольким пользователям, подключенным к одной машине, использовать различные физические терминалы.
решение2
Просто используйте gksu -u желаемое имя пользователя, введите пароль, и все готово.
DISPLAY=:1.0 gksu [-u <user>] [options] <command>
В качестве альтернативы вы можете использовать su, а затем установить XDISPLAY на нужный экран и, наконец, запустить нужное вам приложение.
решение3
Вот как я этого добиваюсь:
- Откройте X-терминал как пользователь с существующим X-сеансом.
- Введите команду
xauth list
. Вы должны увидеть значения X Magic cookie, которые аутентифицируют запросы к X-серверу для различных дескрипторов. Скопируйте тот, который имеет ссылку "unix". Напримерmyhost/unix: MIT-MAGIC_COOKIE-1 df8923ae98098fb890c63454c7c
- Откройте второй терминал как первый пользователь, но переключите пользователя (su) на нужный вам идентификатор, например
su - user2
- Теперь, когда вы сменили пользователя, введите команду
xauth add
и вставьте строку, которую вы ранее скопировали на этапе 2, затем нажмите клавишу Enter, например:xauth add myhost/unix: MIT-MAGIC_COOKIE-1 df8923ae98098fb890c63454c7c
- Запустите X-программу во втором терминале из командной строки, например:
firefox
Вот и все!
решение4
Сначала добавьте второго пользователя в localuser:
$ xhost SI:localuser:user2
localuser:player добавляется в список контроля доступа
Затем запустите свои приложения:
$ sudo -u user2 -H firefox