gksu: Gtk-WARNING **: не могу открыть дисплей:: 0

40

Внезапно ГКСУ перестал работать на меня:

~$ gksu gparted

(gpartedbin:24252): Gtk-WARNING **: cannot open display: :0

То же самое происходит с gparted-pkexec:

~$ gparted-pkexec 
No protocol specified

(gpartedbin:25454): Gtk-WARNING **: cannot open display: :0

Что может быть причиной этого?

Я не запускаю это через SSH или VNC. Это localhost в обычном терминальном окне.

d_inevitable
источник
Вы не работаете в графическом пользовательском интерфейсе или не пытаетесь запустить программу в системе (например, через ssh), которую не предоставляет графический интерфейс.
AB
1
@AB Я должен уточнить, что это не через SSH. Он находится на локальном хосте в обычном терминальном окне. Infact открытие gparted из меню приложения имеет тот же результат.
d_inevitable
Вам не нужно использовать gksuдля запуска GParted. gpartedиспользует polkit для получения повышенных привилегий.
Муру
@muru, когда я бегу gpartedбез gksuменя, я получаюRoot privileges are required for running gparted.
d_inevitable
Хорошо, попробуйте gparted-pkexec(без gksu) или gksu gpartedbin.
Муру

Ответы:

67

Если вы работаете в Ubuntu 17.10 или новее, эта проблема может возникнуть, если приложение не было обновлено с полной поддержкой Wayland. В качестве обходного пути, пока приложение не будет обновлено, вы можете запустить

xhost +SI:localuser:root

что позволит rootпользователю отображать приложения на вашем рабочем столе. Также смотрите этот раздел вопросов и ответов для других возможных обходных путей: почему gksu / gksudo или запуск графического приложения с sudo не работают с Wayland?

источник

Cutton Eye
источник
@MDMower Спасибо за редактирование, узнал что-то новое =)!
Cutton Eye
@pomsky Спасибо за добавление ссылки;)!
Cutton Eye
В 18.04 X-Org будет снова использоваться по умолчанию. Так что эта проблема должна исчезнуть тогда. смотри
Cutton Eye
11

Попробуйте запустить xhost +localhostв своем терминале, а затем снова запустите команду. Это позволяет всем пользователям вашей системы (т.е. root) открывать окна на вашем экране. Убедитесь, что вы используете + localhost, а не просто +, так как более безопасно разрешать соединения только с локального хоста, чем из любого места.

Чтобы сделать это постоянным, отредактируйте ~/.xinitrcфайл следующим образом:

Бег gedit ~/.xinitrc

Отредактируйте файл так, чтобы он выглядел следующим образом (он должен быть пустым в начале):

#! /bin/bash
xhost +localhost &

Теперь сохраните файл, выйдите и войдите в систему. Теперь все должно нормально работать с sudo.

Я не могу воспроизвести вашу проблему 14.04, но это работало для меня в прошлом, когда sudo / gksu выдавал эту ошибку.

Источники:

  1. http://www.nikhef.nl/~mjg/xhost_plus.html
  2. https://forums.opensuse.org/showthread.php/405624-sudo-doesnt-open-X-programs
  3. https://wiki.ubuntu.com/CustomXSession
Марк Паскаль
источник
1
Это действительно работает. Значит ли это, что это ограничение контроля доступа? Любые идеи, что может быть причиной этого?
d_inevitable
Да, это функция безопасности X. Она разрешает только подключения вашего пользователя к серверу xserver, пока я не скажу иначе. Я не очень уверен, почему это требуется для некоторых приложений, а не для других, и я понятия не имею, почему он будет делать это для всех вещей. Возможно, вы где-то возились и ужесточили меры безопасности?
Марк Паскаль
2
Это приводит к ошибке: xhost: невозможно открыть дисплей ""
IgorGanapolsky
5
На redis было предложено использовать xhost +local:. После этого я смог запустить gparted из терминала, но использование xhost +localhostне сработало.
Rmin
1
Верно! xhost +local:исправил мой! Это дает non-network local connections being added to access control listто, что нужно.
Лобнер
5

Выполните следующее в своем терминале:

nano /home/user/.bashrc # user = name of your user

Добавьте следующую строку в конце.

export XAUTHORITY=$HOME/.Xauthority
Вильдер Эрнандес Гарсия
источник
2
Было бы полезно, если бы вы могли добавить некоторые объяснения того, как это решает проблему, и имеет ли это какие-либо побочные эффекты?
Джефф