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

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

Например:

  • Debian Wheezy: проблема установки пакета .deb, который использует update-rc.d с номерами зависимостей
  • Зачем нужно добавлять GPG-ключ с ключом apt перед добавлением URL-адреса в sources.list и загрузку-установку приложения с помощью apt-get?
  • Вдруг потеряли все кроны
  • Как правильно отключить оболочку Gnome 3 в Debian?
  • Ошибка сервера Xpra (ошибка при принятии нового соединения)
  • Последний Debian wheezy / тестирование ISO по умолчанию для KDE?
  • sudo -i glxgears 

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

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

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

  • Сервер Debian Jessie не имеет доступа в Интернет
  • Скрипт для переключения setxkbmap
  • Проблема с выпуском Debian Squeeze apt-get с репозиториями HWRAID
  • Есть ли способ предотвратить захват фокуса другим приложением?
  • vnc: невозможно получить приглашение оболочки с открытым приложением по умолчанию
  • Сделать пакет debian для установки python
  • 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 
    Linux и Unix - лучшая ОС в мире.