- Ошибка cannot open display в Linux
- Что означает «cannot open display» в Linux?
- Как исправить «can’t open display :0»
- 1. Использование PlicyKit
- 2. Использование sudo
- 3. Использование gvfs
- 4. Снимаем ограничение доступа к Xorg
- Выводы
- DBA Career
- Thursday, 24 May 2018
- xhost: unable to open display «» | Check if the DISPLAY variable is set | Oracle Linux
- xhost: unable to open display «» | Could not execute auto check for display colors using command /usr/bin/xdpyinfo. Check if the DISPLAY variable is set
- How it began?
- Как исправить ошибку «невозможно открыть дисплей» при открытии программы X после ssh с включенной переадресацией X11?
- [Решено] ‘Xhost +’ выдаёт /Unable to open display «»/
- xhost unable to open display
- Answers
Ошибка 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 и так далее.
Но поскольку при запуске команды через 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 или другом дистрибутиве. Как видите, это не очень сложно. А вы знаете другие пути решения? Напишите в комментариях!
Источник
DBA Career
Thursday, 24 May 2018
xhost: unable to open display «» | Check if the DISPLAY variable is set | Oracle Linux
xhost: unable to open display «» | Could not execute auto check for display colors using command /usr/bin/xdpyinfo. Check if the DISPLAY variable is set
Linux Unix OS Issues |
This is the basic but quite troublesome issue which is normally faced at least once by every single DBA in their lifetime. Though the issue is not specifically related to DBA activities as it’s a normal OS (LINUX/UNIX) level issue. That’s why this post is here.
How it began?
So while practicing Oracle 12c Database installation on Oracle linux 7.5, I provided the access to Oracle User to open Installer (GUI) using
]# xhost +SI:localuser:oracle
localuser:oracle being added to access control list
(This will give access to only Oracle User)
OR you can also run
]# xhost +
access control disabled, clients can connect from any host
(This will give access to every user created on your system)
But when I tried running the installer, it failed with..
[oracle@practice database]$ ./runInstaller
Starting Oracle Universal Installer.
Checking Temp space: must be greater than 500 MB. Actual 17736 MB Passed
Checking swap space: must be greater than 150 MB. Actual 4095 MB Passed
Checking monitor: must be configured to display at least 256 colors
>>> Could not execute auto check for display colors using command /usr/bin/xdpyinfo. Check if the DISPLAY variable is set. Failed By Rathore — May 24, 2018
Источник
Как исправить ошибку «невозможно открыть дисплей» при открытии программы X после ssh с включенной переадресацией X11?
После запуска приложения X11 (XQuartz 2.3.6, xorg-server 1.4.2-apple56) на моем Mac (OS X 10.6.8), открытия терминала в X11 и его запуска xhost + , я перехожу на свою виртуальную машину ssh -Y Ubuntu 10.04 (работающую на VMware). Fusion). Когда я бегу gedit .bashrc (например), я получаю:
set | grep DISPLAY ничего не возвращает
Но если я ssh -Y в мою машину Ubuntu 11.04, gedit .bashrc работает. echo $DISPLAY возвращает «localhost: 10.0».
Я пытался, export DISPLAY=localhost:10.0 пока sshed в мою виртуальную машину, а затем работает gedit .bashrc , но я получаю:
Что может отличаться в конфигурации двух разных машин Ubuntu, что объясняет, почему один работает, а другой нет?
Обновление: как предложено Zoredache в комментарии ниже, я бежал sudo apt-get install xbase-clients , но у меня все еще остается та же проблема.
Проверьте sshd_config сервера (обычно /etc/ssh/sshd_config ) и убедитесь, что опция X11Forwarding включена со строкой
Если X11Forwarding не указан, по умолчанию на компьютерах Debian, которые я могу проверить, по умолчанию нет.
Ответ : Вы можете исправить ошибку «не могу открыть дисплей», выполнив процедуру xhost, упомянутую в этой статье.
Разрешить клиентам подключаться с любого хоста с помощью xhost +
Выполните следующую команду, чтобы отключить контроль доступа, с помощью которого вы можете разрешить клиентам подключаться с любого хоста.
контроль доступа отключен, клиенты могут подключаться с любого хоста
Включить пересылку X11
При выполнении ssh используйте опцию -X для включения пересылки X11.
Включите надежную пересылку X11, используя опцию -Y,
Откройте приложения GUI на этом хосте
После открытия ssh-соединения с удаленным хостом, как описано выше, вы можете открыть любое приложение с графическим интерфейсом, которое откроет его без проблем.
Если вы по-прежнему получаете сообщение об ошибке «Не удается открыть дисплей», установите переменную DISPLAY, как показано ниже.
Примечание. IP — это IP-адрес локальной рабочей станции, на котором вы хотите отобразить приложение с графическим интерфейсом.
У меня была эта проблема при входе в Ubuntu VM из Mac OS X, а также — по некоторым причинам он не похож на «localhost» в отображаемой переменной. Так что установите IP вручную, как предлагает harrymc:
Тогда программы X11 должны быть в порядке. Не похоже, что нужно указывать ОС, что localhost и 127.0.0.1 эквивалентны, но это работает, по крайней мере.
У меня была эта проблема с моим сервером CentOS KVM, мне не хватало программы «xauth».
Если у вас возникла эта проблема через некоторое время при запуске с -X arg. или просто ForwardX11 в / etc / ssh / ssh_config, затем запустите $ ssh username@hostname -Y , чтобы включить надежную пересылку X11 , не знаю точную причину, но я предполагаю, что -X срок действия некоторых функций истекает через некоторое время, возможно, для повышения безопасности.
Вот что я нашел в Интернете:
Если вы используете ssh -X remotemachine, то удаленный компьютер считается ненадежным клиентом. Таким образом, ваш локальный клиент отправляет команду на удаленный компьютер и получает графический вывод. Если ваша команда нарушает некоторые настройки безопасности, вы получите сообщение об ошибке.
Но если вы используете ssh -Y remotemachine, удаленный компьютер считается доверенным клиентом. Этот последний вариант может открыть проблемы безопасности. Потому что другой графический (X11) клиент может прослушивать данные с удаленной машины (делать снимки экрана, делать кейлогинг и другие неприятные вещи), и даже можно изменить эти данные.
Если вы хотите узнать больше об этих вещах, я предлагаю прочитать справочную страницу Xsecurity или спецификацию расширения X Security. Кроме того, вы можете проверить параметры ForwardX11 и ForwardX11Trusted в вашем / etc / ssh / ssh_config.
Источник
[Решено] ‘Xhost +’ выдаёт /Unable to open display «»/
На невозможность to open display указывает уже не одна команда. Что может быть не так?
kurych
А кроме того, что в системе «Стоит Xorg, xfce, slim», Xorg запущен? То есть, команду xhost вы в xterm набираете или в текстовом терминале? И если таки Xorg запущен, то не из-под пользователя ли root?
/.bashrc для пользователя, от которого хотите запускать гуйные приложения.
killer1804
просто от другого пользователя сделайте export DISPLAY=.0:0 и все , а еще лучше поместите эту строчку в
/.bashrc для пользователя, от которого хотите запускать гуйные приложения.
Источник
xhost unable to open display
Hallo!I am trying to install Oracle 11gR1 on Oracle Enterprise Linux 5.5.I have been trying to set DISPLAY parameters to launch the OUI but I get the error below.
I am doing the installation directly on the db server (and not accessing db server from any client machine) and the IP for db server is 10.0.0.1.
]# xhost +
access control disabled, clients can connect from any host
[[email protected]
]$ xhost +
xhost: unable to open display «10.0.0.1:0.0»
[[email protected]
]$ cd /install/database
[[email protected] database]$ ./runInstaller
Starting Oracle Universal Installer.
Checking Temp space: must be greater than 80 MB. Actual 59727 MB Passed
Checking swap space: must be greater than 150 MB. Actual 7012 MB Passed
Checking monitor: must be configured to display at least 256 colors
>>> Could not execute auto check for display colors using command /usr/bin/xdpyinfo. Check if the DISPLAY variable is set. Failed
Answers
If the OS environment is 100% correct, then you need to do NOTHING after login concerning
DISPLAY variable.
Two alternatives exist.
1) logon to DB Server directly via its «console»
2) Connect to DB Server from remote system using ssh -X or putty with X11 Forwarding enabled.
After login to DB Server & before you do anything else issue command below
COPY command & results then PASTE all back here
Can you try this one
Talip Hakan Ozturk
http://taliphakanozturken.wordpress.com/
]# xhost +
access control disabled, clients can connect from any host
[[email protected]
]# xclock
Error: Can’t open display: 10.0.0.1:0.0
Is this a fresh terminal, or have you done any su to get to the root prompt. If any su, then this is no good. (Why are you at the root prompt anyway — baaaaad idea and baaaaad habit to get into if you are an Oracle DBA.)
Part 1 — on the XServer:
The XServer is the software that runs the screen. The XServer is NOT the software running the user program, such as dbca or runInstaller — that runInstaller is the XClient.
If you are using a Linux machine, and have gnome (KDE, twm, etc.), the userid you log in from the Linux splash screen is the one that owns the XServer.
The XServer needs permission to display things from the XClient. To give that permission, open a terminal from scratch — do not ‘su’ — and run ‘xhost +’ or preferrably ‘xhost + ‘
The XServer runs on a host, and operates on a DISPLAY and allows for multiple SCREENS.
To determine the DISPLAY and SCREEN, enter the command ‘set | grep DISPLAY’ to get something like «DISPLAY=:0.0»
To determine the host, enter ‘hostname’ to get something like ‘bi11g.e2eo.ca’
The XClient will need this information to proceed.
So, at the top level, without having su’d, you enter ‘xhost +’ or ‘xhost + bi11g.e2eo.ca’. (Stick with xhost +’ for now.)
Part 2 — on the proposed XClient
Now you are ready to run the Oracle installer. You go to the machine that should run the installer by ssh, or telnet, or (if it’s the local machine) by ‘su — oracle’.
You want to tell the installer to send the display to the machine that has the XServer. You do that using «export DISPLAY=
IF IT ON THE LOCAL MACHINE AND YOU USED ‘xhost +’, THEN OMIT THE
and your session becomes:
]# xhost +
access control disabled, clients can connect from any host
*do NOT set or mess with DISPLAY — this is the server*
[[email protected]
]$ export DISPLAY=:0.0
*do NOT NOT NOT do another xhost here*
[[email protected]
]$ cd /install/database
[[email protected] database]$ ./runInstaller
Starting Oracle Universal Installer.
Источник