Я установил Debian на мою машину прошлой ночью. Теперь я не понимаю, почему я не могу запускать приложения с графическим интерфейсом из терминала при запуске от имени пользователя root.
Например:
sudo -i
glxgears
Создает следующий вывод:
No protocol specified
Error: couldn't open display :0
Но когда я впервые открываю терминал, я могу работать glxgears
с учетной записью пользователя. Только после того, как я это сделаю sudo -i
, проблема возникнет. Это происходит для любого приложения с графическим интерфейсом, которое я пытаюсь запустить. Я думаю, что это, вероятно, связано с X11, но я не уверен.
Ответы:
Доступ к X-серверу требует двух вещей:
$DISPLAY
Переменная указывает на правильный дисплей (обычно:0
)Информация аутентификации может быть явно указана через
$XAUTHORITY
, и по умолчанию в~/.Xauthority
противном случае.Если
$DISPLAY
и$XAUTHORITY
установлен для вашего пользователя,sudo
то установит их и для новой оболочки, и все должно работать нормально.Если они не установлены, они, вероятно, по умолчанию будут использовать неправильные значения, и вы не сможете запускать и X-приложения.
В Debian
$XAUTHORITY
это обычно не устанавливается явно. Просто добавьВам
.bashrc
или прямо говорятXAUTHORITY=~/.Xauthority sudo ...
и все должно работать.Вы также можете использовать
xauth list
для проверки наличия правильной информации аутентификации.источник
xauth info
показывает путь к авторитетному файлуxhost +
исправил мою проблемуxhost +
полностью деактивирует аутентификацию и позволяет каждому получить доступ ко всем приложениям на вашем экране ...sudo -i
вместоsudo su -
.У меня был такой же вопрос, как и у вас, но для обычного пользователя. Допустим, я хочу запустить firefox, используя учетную запись пользователя foo. Я вошел как бар:
К сожалению, эта команда завершилась с той же ошибкой, что и в вопросе (т. Е. Протокол не указан и не может открыть дисплей)
Моим решением было просто добавить пользователя foo в список авторизованного доступа к X-серверу.
И все, я смог запустить Firefox (и другое приложение X), используя
sudo
пользователя foo.Справочная информация : в X Window существует архитектура клиент / сервер. Когда вы запускаете приложение, вы запрашиваете у X-сервера авторизацию для его отображения. По умолчанию, когда вы открываете сеанс (вы входите в систему графически), вам (вашему пользователю), очевидно, разрешается общаться с сервером и отображать приложения. Другие пользователи не имеют этого разрешения, если вы не укажете его.
xhost
инструмент для манипулирования списком разрешенийsi
Указывает на то, что правило на стороне сервера и авторизации локального пользователяfoo
к приложениям дисплея. X Window очень мощен в этом отношении, и вы можете отображать удаленные приложения локально, играя сDISPLAY
переменной окружения иxhost
(но не ограничиваясь ими). В старые времена, когда люди печаталиxhost +
и косвенно позволил каждому использовать свой сеанс X, стало возможным отображать приложение на экране для шалостей ;-) не так много в наше время, как люди все меньше и меньше используют архитектуру клиент / сервер X Window (по крайней мере, что я наблюдаю в последние 10 лет).PS: Я сделал это для того, чтобы запустить Firefox в своего рода «тюрьме» (чтобы избежать такой уязвимости, как для pdf.js в будущем). Но я быстро обнаружил, что вызов Firefox через sudo не позволит ему получить доступ ни к аудио, ни к видеооборудованию. Но есть один парень, который четко объясняет, как активировать аппаратное ускорение видео и аудио при вызове Firefox через sudo . YMMV с этими инструкциями, например, мне по-прежнему отказано в разрешении на аудио, но видео в порядке (проверено на Fedora 22 с включенным SELinux).
источник
foo
былоroot
, т.е. мне пришлось работатьxhost si:localuser:root
на Ubuntu 17.10.xhost si:localhost<user>
команду? Если ни один пользователь не вошел в систему, то ни у кого нет доступного X-сервера для разрешения.ParaView
помощью программы, построеннойvtk
, как правило, на самой рабочей станции.ParaView
также предоставляет безопасную модель рендеринга клиент / сервер без использования ssh, которую я хотел бы использовать вместо удаленной VNC. Без входа на рабочую станцию и выполненияxhost
я не могу использовать графический процессор. Это означает, что я не могу перезагрузить компьютер удаленно и все еще иметь доступ к графическому процессору.-X
или (лучше?)-Y
На ssh, он сделает правильное перенаправление. Конечно, тогда вам нужен локальный C-сервер. Однако с GPU и OpenGL я не уверен, где происходит рендеринг / вычисления, возможно, это на стороне клиента, а не на сервере. Может быть сложно.Вы также можете
Укажите отображение, которое будет использоваться в командной строке, добавив
-display :0.0
или
Установите переменную окружения в скрипте входа в систему root (один из .bashrc, .profile, .bash_profile ...).
export DISPLAY=:0.0
Вы можете проверить, установлен ли он,
Чтобы открыть ваш дисплей для всех пользователей со всех хостов как обычного пользователя, вы можете сделать это с помощью:
xhost +
источник
xhost +
работал для меня тоже, только то, что они забыли упомянуть, что мы должны запускать его из терминала авторизующего пользователя, а не из терминала подsudo su
.Учитывая, что вы работаете в Debian, простое и поддерживаемое решение - организовать
sudo
копирование учетных данных авторизации X11.pam_xauth
входит вlibpam-modules
комплект именно для этой цели; чтобы использовать его, вам просто нужно добавитьв ваш
/etc/pam.d/sudo
файл. Вы также можете добавить его вsu
. Для полной информации, обратитесь к справочнойpam_xauth
странице, конечно.источник
Что помогло мне:
xauth generate :0 . trusted
наuser
стороне, которая будет генерировать новыйMIT-MAGIC-COOKIE-1
Проверьте, что вновь созданный Ключ с
xauth list' as
пользовательскойand
корневой(they should be the same if your
переменной xAuthority` указывает на тот же файл.Вуаля,
root
будет доступ к любомуX-App
из терминала, но только временно.Чтобы сделать его постоянным, смотрите ответ @Huygens!
источник
Альтернативное решение :
Такие службы, как cron, работающие под root, не имеют доступа к отображению, если текущий пользователь x не является root.
Нам просто нужно добавить пользователя root в x, вы можете сделать это во время входа в систему с помощью сценария запуска
В целях тестирования мы можем просто запустить команду под текущим пользователем и перезапустить корневой скрипт / job / service / ...
источник
Команда
sudo
имеет переключатель для сохранения переменных среды.Так что вы можете запустить команду с ключом -E. Пример:
Если вам не нужно запускать критически важные приложения, такие как веб-браузеры, вам лучше добавить ключ -E с помощью sudo. Мы не можем запустить Chrome или Firefox, просто добавив ключ -E . Потому что во многих браузерах реализована защита от нарушений пространства пользователя. @ Гюйгенс ответ может иметь понимание по этому вопросу.
Примечание. Добавление ключа -E не поможет, если среда вашего пользователя НЕ имеет
DISPLAY
иXAUTHORITY
уже настроена правильно .источник
используйте эту команду, и она будет работать
источник
cp: cannot stat ‘/home/user/.Xauthority’: No such file or directory
на любой из 10+ машин на основе Debian, к которым у меня есть доступ.