
Я сталкиваюсь с несогласованностью переменных $DISPLAY на моих серверах OEL6, что вызвало довольно много проблем.проблема с файлами сокетов.
Я нашёл на удивление мало информации о том, что на самом деле устанавливает переменную окружения $DISPLAY. Я знаю, что она делает (более или менее) и как вручную установить её в оболочке. Чего я не знаю, так это КАК она устанавливается при запуске системы.
так
Как и где устанавливается переменная среды GDM $DISPLAY и как принудительно установить GDM в значение :0.0?
Примечание: Я НЕ ищу, export DISPLAY=:0.0
так как в данном случае это бесполезно.
решение1
В человекеХ(7)есть разделОтображаемые именав котором говорится:
В системах POSIX отображаемое имя по умолчанию хранится в переменной окружения DISPLAY. Эта переменная автоматически устанавливается эмулятором терминала xterm.
и далее:
Наконец, большинство программ X принимают опцию командной строки -display displayname для временной перезаписи содержимого DISPLAY. Это чаще всего используется для вывода окон на экран другого человека или как часть команды "удаленная оболочка" для запуска xterm, указывающего на ваш дисплей.
человек дляX-сервер(1)у нас есть информация о вариантах:
:displaynumber X-сервер работает как заданный displaynumber, который по умолчанию равен 0. Если на хосте одновременно должно работать несколько X-серверов, каждый из них должен иметь уникальный display-номер. См. раздел DISPLAY NAMES на странице руководства X(7), чтобы узнать, как указать, какой display-номер клиенты должны попытаться использовать.
Взгляните на: /etc/gdm/Init/Default (доступно в ArchLinux, поэтому не уверен, доступно ли в системе RHEL).
Еще несколько выводов. DISPLAY устанавливается программой xinit. В xinit.c есть следующее:
if (argc > 0 && (argv[0][0] == ':' && isdigit(argv[0][1])))
displayNum = *argv;
else
displayNum = *sptr++ = default_display;
(...)
static void
set_environment(void)
{
if (setenv("DISPLAY", displayNum, TRUE) == -1)
Fatal("unable to set DISPLAY");
}
Таким образом, xinit может установить значение по умолчанию или взять его из параметра, переданного xinit при запуске.xinit(1):
xinit [ [ client ] options ... ] [ -- [ server ] [ display ] options ... ]
И еще одна переменная окружения может быть установлена с помощью PAM. Например:/etc/security/pam_env.conf
# Set the DISPLAY variable if it seems reasonable
#DISPLAY DEFAULT=${REMOTEHOST}:0.0 OVERRIDE=${DISPLAY}