Gtk warning cannot open display windows

Gtk-WARNING **: cannot open display:

Имеется проблема, я о ней уже писал тут. Не получается запускать gui-программы из-под рута, выдаётся сообщение, указанное в заголовке темы. Мне в той теме писали что не стоит запускать gui из-под рута и советовали настроить sudo. Да, я всё понимаю, запускать gui из-под рута это очень небезопасно, да, sudo я настроил. Но существуют же проприетарные программы, которые устанавливаются исключительно с помощью gui-инсталяторов, не прописывать же мне каждый раз в sudoers путь к инсталятору, а потом удалять его оттуда. Кроме того, та же ошибка выводится при набирании xfwm4 —daemon, а поэксперементировать с этой штукой мне хочется. Вобщем, тема пока что не закрыта.

kdesudo
gksu
ssh -XY -l root localhost

anon_666, растолкуйте, пожалуйста, то что написано на форуме, ссылку на который вы мне дали. Для того чтобы export DISPLAY=:0 выполнялась при каждом запуске, мне нужно прописать его в /root/.bashrc? Или просто прописать DISPLAY=:0 без export? Чем отличаются эти две формы записи? А куда прописывать xhost?

su -c «export DISPLAY=:0 firefox»

Я в этих манах всё равно не разберусь и в результате создам уже третью тему, а зачем плодить лишних сущностей. Может кто-нибудь объяснить:

1) чем отличаются записи:

2) какие файлы мне нужно отредактировать, чтобы оно работало при КАЖДОЙ загрузке?

> Я в этих манах всё равно не разберусь

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

1. описано в любой документации по shell, коей и на русском языке — хоть зачитайся.

2. какие угодно. можно изменить загрузочный скрипт xfce, добавив туда строку «xhost +localhost». можно эту же команду дергать из какого-нибудь $XDG_CONFIG_HOME/autostart/xhost.desktop (курить спеки xdg по-поводу автозапуска программ). если вы такой любитель консоли — можно ее-же загнать в .profile. там-же, только для рута, можно гвоздями прибить установку DISPLAY. а можно просто освоить наконец sudo с NOPASSWD и не париться.

Ну вот, началось, будете посланы.

До того как вы мне сказали читать доки по шеллам, откуда мне было знать что мне нужны доки ИМЕННО по шеллам?

Я понимаю, что есть «какие угодно» способы. Но тут сидят опытные админы, имеющие по этому делу сертификат с печатью, им что трудно подсказать максимально рациональный способ, а не тот который «какой угодно»? А sudo между прочим пользоваться я умею.

>Но тут сидят опытные админы

Опытные админы сидят в толкс.

с set не сталкивался.

export — для текущего терминала
без export — для текущей команды

типо следующее идентично

> До того как вы мне сказали читать доки по шеллам, откуда мне было знать что мне нужны доки ИМЕННО по шеллам?

вы тот mousepad из предыдущего топика в космосе запускали, или все-таки в шэле? иногда и головой полезно думать.

Читайте также:  Find all old files linux

vertexua, а зачем тогда в инициализационных скриптах применяются две конструкции одновременно

А в гугле я уже сутки сижу и вот хоть убей не пойму почему переменные нужно прописывать в /root/.bashrc, а не например в /etc/bash.bashrc.

Дальше. Нагуглил вот что:

в DISPLAY указывается адрес X-сервера в формате [server_address]: там есть еще одна циферка но она тебе не понадобится для локальной машины это всегда :0 вот, собсно. Когда ты пускаешь X, эта переменнаяавтоматом выставляется в :0. Но если ты перейдешь в консоль, т.е. нажмешь скажем CTRL-ALT-F1, то там этой переменной не будет, тебе нужно будет ее писать ручками. Подытоживая все вышесказанное, скажу, что если прога требует эту вариаблу, то ей нужен УЖЕ запущенный Х.

То есть, устанавливая export DISPLAY=:0, я сообщаю любой gui-программе что x-сервер находится на том же компьютере что и запускаемая программа.

Но зачем нужен xhost и почему в других дистрибутивах всё нормально работает без него? Задолбался уже башкой в открытую дверь стучаться.

и почему в других дистрибутивах всё нормально работает без него

Потому что в других дистрибутивах оно настроено искаропки, ментейнерами

Fedora. Как видно отсюда, руту и гдм можно подключаться к моим иксам.

Чтобы контролировать доступ пользователей к икссерверу. Если бы его не было, к твоим иксам мог бы подключиться любой пользователь и грабил бы корованы (скриншоты делал, клавиатуру перехватывал).

Чтобы контролировать доступ пользователей к икссерверу. Если бы его не было, к твоим иксам мог бы подключиться любой пользователь и грабил бы корованы (скриншоты делал, клавиатуру перехватывал).

Так. xhost изменяет правила доступа к x-серверу. То есть она изменяет параметры уже запущеного x-сервера? То есть она изменяет параметры уже запущенного процесса? То есть она вносит изменения в /proc? Так куда же прописывать xhost +localhost? В конец скрипта /etc/X11/Xsession? Где он прописан в вышеупомянутой федоре?

Ошибка cannot open display в Linux

В операционной системе Linux очень жёсткий контроль полномочий для пользователей. Если пользователь не имеет прав администратора, то он не сможет сделать практически ничего дальше своей домашней папки. Но обычно графические приложения запускаются от имени рядового пользователя. Однако время от времени нужно что-то делать в графическом интерфейсе с файлами, которые не принадлежат текущему пользователю.

И тогда новички пытаются запустить нужное графическое приложение через sudo. Как правило, в таких ситуациях они получают ошибку «cannot open display :0 linux» или нечто подобное. В этой статье мы поговорим о том, что означает эта ошибка, а также как её обойти.

Что означает «cannot open display» в Linux?

Эта ошибка может выглядеть по-разному, в зависимости от приложения, которое вы будете запускать:

  • Gtk warning cannot open display :0;
  • Unable open display :0;
  • Can’t connect to display :0 No protocol specified;

И так далее. Все эти ошибки означают одно: программа не может подключиться к графической подсистеме. Чтобы понять почему это происходит, возвращаемся к тому, что было сказано в самом начале статьи — в Linux очень жёсткий контроль прав пользователей.

В отличие от Windows, где графический интерфейс тесно интегрирован в операционную систему, в Linux это просто ещё одна программа, запущенная от имени обычного пользователя. Эта программа — графический сервер, на данный момент чаще всего используется Xorg.

Ещё одно отличие от Windows — это то, что вы можете запустить несколько графических серверов, и они будут работать не мешая друг другу, потому что каждый из них имеет свой адрес, по которому к нему можно подключиться. Эти серверы доступны глобально во всей системе (почти), но чтобы программы знали, к какому адресу им обращаться при запуске X-сервера, для текущего пользователя создаётся переменная DISPLAY с адресом графического сервера. По умолчанию для первого сервера присваивается адрес :0, для второго :1 и так далее.

Читайте также:  Жесткие диски видны как съемные windows

Но поскольку при запуске команды через sudo для неё создаётся новое окружение с полномочиями суперпользователя и все переменные текущего пользователя из него не доступны, то наша программа просто не знает, по какому адресу ей обращаться. Это что касается ошибки, когда в конце сообщения «can’t open display» нет нуля. Если нуль есть, значит адрес известен, но X-сервер запрещает подключение. По умолчанию X-сервер разрешает подключаться к себе только пользователю, от имени которого он запущен. А теперь давайте разберём, как обойти проблему.

Как исправить «can’t open display :0»

Начнём с того, что для запуска графических приложений от имени суперпользователя существуют специальные утилиты. Программа sudo для этого не предназначена. Изначально для таких целей использовались kdesudo в KDE и gksu в Gnome. Сейчас они считаются устаревшими и поставляются по умолчанию далеко не всегда. В Ubuntu вы можете установить gksu командой:

sudo apt install gksu

А затем запустить с помощью неё своё приложение:

Но надо заметить, что с дисплейным сервером Wayland эта утилита работать не будет. А полноценных альтернатив gksu не существует.

1. Использование PlicyKit

Есть утилита pkexec. Она достаточно удобная, но для каждой программы, которую вы хотите запустить с помощью неё надо создавать отдельно файл настройки. Например, чтобы запустить Nautilus, надо открыть файл ниже и добавить в него такой текст:

sudo vi /usr/share/polkit-1/actions/org.freedesktop.policykit.pkexec.policy

Это значит, что для каждого приложения нам необходимо включить параметр org.freedesktop.policykit.exec.allow_gui=true, иначе переменная DISPLAY экспортирована не будет. Теперь мы можем запустить nautilus:

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

pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY nautilus

2. Использование sudo

Можно попросить sudo передать все переменные нашего пользователя во временное окружение суперпользователя с помощью опции -E:

sudo -E nautilus

Тогда программа запускается.

3. Использование gvfs

Gnome Virtual Filesystem тоже позволяет получить доступ к файлам с правами администратора. Особенно если вам надо только отредактировать файл. Для этого просто добавьте в начале пути admin://. Например, так можно открыть файл /etc/group для редактирования с помощью gedit:

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

4. Снимаем ограничение доступа к Xorg

Обычно если переменная $XAUTHORITY содержит адрес файла аутентификации Xorg, то программа использует его для аутентификации в Xorg. Но если значение переменной не установлено, то сервер не позволит установить соединение. Например, если вы получаете ошибку подключения к Display :0, это значит, что адрес дисплейного сервера известен, но к нему нет доступа. Надо разрешить подключаться к Xorg суперпользователю. Для этого используйте команду:

Эта команда действует только до перезагрузки, чтобы сделать её постоянной, добавьте команду в конец

#!/bin/bash
xhost +SI:localuser:root &

Выводы

В этой статье мы рассмотрели, как исправить ошибку gtk warning «cannot open display :0» в Ubuntu или другом дистрибутиве. Как видите, это не очень сложно. А вы знаете другие пути решения? Напишите в комментариях!

Arch Linux

You are not logged in.

Читайте также:  Realtek hd audio drivers для windows 10 msi

#1 2016-10-29 12:12:03

Gtk-WARNING **: cannot open display: :0.

I think few days ago when I’m installing something, I might have screwed up some of my settings which now does not allow me to run certain stuffs.
Here is the problem below:

]$ sudo gedit
[sudo] password for root:
Unable to init server: Could not connect: Connection refused

(gedit:12380): Gtk-WARNING **: cannot open display: :0.
The above does not allow me to open gedit.
I’ve tried some solution like xhost and it still doesn’t work, perhaps someone can shed some light on this?

Last edited by dtyj (2016-10-29 12:52:21)

#2 2016-10-29 12:16:18

Re: Gtk-WARNING **: cannot open display: :0.

As of a recent update, gnome defaults to using wayland instead of xorg. The laundry list of breakage this has caused seems immeasurable.

«UNIX is simple and coherent. » — Dennis Ritchie, «GNU’s Not UNIX» — Richard Stallman

#3 2016-10-29 12:54:08

Re: Gtk-WARNING **: cannot open display: :0.

As of a recent update, gnome defaults to using wayland instead of xorg. The laundry list of breakage this has caused seems immeasurable.

Hmm, not idea what you meant. I’m still pretty much new to this Arch Linux thing
Here’s a screenshot if that helps, http://imgur.com/a/kt2k1

Last edited by dtyj (2016-10-29 13:07:19)

#4 2016-10-29 12:55:27

Re: Gtk-WARNING **: cannot open display: :0.

It’s fine to not know what I meant. It’s less fine to not have bothered to follow the link I provided which would help you learn and know exactly what I meant. The screenshot really doesn’t help. You did a good job of describing the problem in the first post — the cause of the problem is almost certainly related to gnome running on wayland. I gave you the means to test that possibility. Please do so.

EDIT: actually, on second look maybe this isn’t a wayland issue if it only happens when using sudo: you should not run gui programs (especially gtk ones) with sudo, use gksu.

«UNIX is simple and coherent. » — Dennis Ritchie, «GNU’s Not UNIX» — Richard Stallman

#5 2016-10-29 13:32:30

Re: Gtk-WARNING **: cannot open display: :0.

It’s fine to not know what I meant. It’s less fine to not have bothered to follow the link I provided which would help you learn and know exactly what I meant. The screenshot really doesn’t help. You did a good job of describing the problem in the first post — the cause of the problem is almost certainly related to gnome running on wayland. I gave you the means to test that possibility. Please do so.

EDIT: actually, on second look maybe this isn’t a wayland issue if it only happens when using sudo: you should not run gui programs (especially gtk ones) with sudo, use gksu.

Okay here’s what I have done so far.

I’ve created a new file at

/.xinitrc with the following content: exec gnome-session
and I ran startx after that and it gave me this error:

]$ startx
xauth: file /home/dtyj/.Xauthority does not exist
xauth: file /home/dtyj/.Xauthority does not exist

/usr/lib/xorg-server/Xorg.wrap: Only console users are allowed to run the X server

^Cxinit: giving up
xinit: unable to connect to X server: Connection refused
xinit: unexpected signal 2
Couldn’t get a file descriptor referring to the console

Note: My current setup was using Xorg.

Оцените статью