Почему я не могу запускать приложения GUI из «root»: «Не указан протокол»?

Вчера вечером я установил debian на свою машину. Теперь я не понимаю, почему я не могу запускать приложения GUI с терминала при работе от имени root.

Например:

sudo -i glxgears 

Создает следующий вывод:

 No protocol specified Error: couldn't open display :0 

Но когда я впервые открываю терминал, я могу запустить glxgears из учетной записи пользователя. Его только после того, как я делаю, что проблема возникает. Это происходит для любого приложения GUI, которое я пытаюсь запустить. Я думаю, что это, вероятно, связано с X11, но я не уверен.

  • X: alt / ctrl / f1 больше не работает после выключения и включения дисплея с помощью xrandr
  • Выполняется ли xinitrc при входе в систему?
  • Перетаскивание вкладок между браузерами
  • Как запустить Chromium из контейнера докера
  • Что такое оконная система?
  • сделать выбор терминала автоматически копией в буфер буфера обмена системы?
  • перезапустить X11 / Xwindows без отключения сеанса ssh
  • Как определить, какие дисплеи включены / отключены
  • 5 Solutions collect form web for “Почему я не могу запускать приложения GUI из «root»: «Не указан протокол»?”

    Доступ к серверу X требует двух вещей:

    • Переменная $DISPLAY указывающая на правильный дисплей (обычно :0 )
    • Собственная информация об аутентификации

    Информация аутентификации может быть явно указана через $XAUTHORITY , а по умолчанию – ~/.Xauthority .

    Если $DISPLAY и $XAUTHORITY установлены для вашего пользователя, sudo также установит их для новой оболочки, и все должно работать нормально.

    Если они не установлены, они, вероятно, будут по умолчанию ошибочными значениями, и вы не можете запускать и X-приложения.

    В Debian $XAUTHORITY обычно не устанавливается явно. Просто добавь

     export XAUTHORITY=~/.Xauthority 

    к вашему .bashrc или прямо сказать XAUTHORITY=~/.Xauthority sudo ... и все должно работать.

    Вы также можете использовать xauth list для проверки наличия подходящей информации аутентификации.

    Может быть, это может помочь кому-то другому. У меня был такой же вопрос, как у вас, но для обычного пользователя. Предположим, я хочу запустить firefox, используя учетную запись пользователя foo. Я зарегистрирован как бар:

     [bar@localhost ~]$ sudo -u foo -H firefox 

    К сожалению, эта команда завершилась с той же ошибкой, что и в вопросе (т. Е. Ни один протокол не указан и не может открыть отображение)

    Мое решение состояло в том, чтобы просто добавить пользователя foo в список авторизованного доступа к X-серверу.

     xhost si:localuser:foo 

    И именно так я смог запустить Firefox (и другое приложение X) с помощью sudo и пользователя foo.

    Надеюсь, это поможет другим.

    PS: Я сделал это, чтобы запустить Firefox в виде «тюрьмы» (чтобы избежать уязвимости, например, для pdf.js в будущем). Но я быстро обнаружил, что вызов Firefox через sudo не позволит ему получить доступ к аудио и видеооборудованию. Но есть один парень, который четко объясняет, как активировать аппаратное ускорение видео и аудио при вызове Firefox через sudo . YMMV с этими установками, я все еще имею разрешение, отклоненное аудио, но видео в порядке. (тестируется на Fedora 22 с SELinux ON)

    Вы также можете

    Укажите экран, который будет использоваться в командной строке, добавив -display :0.0

    или

    Настройте переменную среды в скрипте входа root (один из .bashrc, .profile, .bash_profile …).

    export DISPLAY=:0.0

    Вы можете проверить, установлен ли он,

     $ env |grep DISPLAY DISPLAY=:0.0 

    Чтобы открыть свой дисплей для всех пользователей со всех хостов в качестве обычного пользователя, вы можете сделать это с помощью:

    xhost +

    Учитывая, что вы находитесь в Debian, простое и поддерживаемое решение заключается в том, чтобы sudo копировать ваши учетные данные авторизации X11. pam_xauth включен в пакет libpam-modules для этой цели; для его использования вам просто нужно добавить

     session optional pam_xauth.so 

    в файл /etc/pam.d/sudo . Вы также можете добавить его в su тоже. Для получения полной информации, pam_xauth , обратитесь к pam_xauth странице pam_xauth .

    используйте эту команду, и она будет работать

     sudo cp /home/user/.Xauthority .Xauthority 
    Interesting Posts

    debian, проблема с DNS

    Когда я должен создать новую группу томов вместо нового логического тома?

    RHEL 6.6: PYCURL ERROR 22 – «Ошибка запрашиваемого URL: 403 Forbidden»

    как перемещать файлы из одной папки в другую с добавлением отметки времени к имени?

    Всегда пересылать трафик.

    Команда ls не работает для каталога с огромным количеством файлов

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

    Как установить BPG (лучшая портативная графика) на Linux Mint 17?

    При обработке входных файлов происходит копирование / обновление и переименование действительного подхода?

    Сохранение списка в определенном формате

    Использование sed в perl?

    virtualbox-guest- * установлен на хосте; может ли это быть причиной замерзания системы?

    Остановить отправку почты cron для резервного копирования?

    Получить все файлы, открытые для записи с помощью pid, рекурсивно

    Могу ли я использовать scp для копирования файлов в домашний каталог без указания его?

    Linux и Unix - лучшая ОС в мире.