Xorg (Русский) - ArchWiki

Jump to content
From ArchWiki
Состояние перевода: На этой странице представлен перевод статьи Xorg. Дата последней синхронизации: 21 октября 2023. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Ссылки по теме

- Автозапуск
- Экранный менеджер
- Оконный менеджер
- Настройка шрифтов
- Темы курсора
- Среда рабочего стола
- Wayland (Русский)
- xinit (Русский)
- xrandr (Русский)
- XDMCP

C https://www.x.org/wiki/:

  Проект X.Org предоставляет свободную реализацию X Window System с открытым исходным кодом. Разработка осуществляется X.Org Foundation, которая является образовательной некоммерческой организацией, совместно с сообществом freedesktop.org.

Xorg (обычно называемый просто X) очень популярен среди пользователей Linux, что привело к тому, что большинство приложений с графическим интерфейсом используют X11, из-за этого Xorg доступен в большинстве дистрибутивов. Для более подробной информации смотрите статью Xorg в Википедии или посетите веб-сайт Xorg.

Wayland — альтернатива и преемник Xorg.

## Установка

Установите пакет xorg-server.

В дополнение к нему, могут понадобиться пакеты из группы xorg-apps для некоторых способов настроек. О них рассказано в соответствующих разделах.

К тому же имеется группа xorg, которая включает пакеты оконной системы Xorg и пакеты из группы xorg-apps, а также шрифты.

### Установка драйвера

Ядро Linux включает в себя видеодрайверы с открытым исходным кодом и поддержку аппаратного ускорения буфера кадров. Однако для работы OpenGL и 2D-ускорения в X11 требуется поддержка на стороне пользовательского ПО.

Сперва определите вашу видеокарту (в строке Subsystem будет написана её модель):

    $ lspci -v | grep -A1 -e VGA -e 3D

Затем установите соответствующий драйвер. Вы можете поискать в базе данных пакетов полный список видеодрайверов с открытым исходным кодом:

    $ pacman -Ss xf86-video

Xorg автоматически ищет установленные драйверы:

- Если он не может найти установленным необходимый драйвер для оборудования (перечислены ниже), тогда он сначала ищет драйвер fbdev (xf86-video-fbdev), который не включает 2D или 3D ускорение.
- Если и он не найден, тогда Xorg ищет общий драйвер vesa (xf86-video-vesa), который поддерживает большое количество чипсетов, но не включает 2D или 3D ускорение.
- А если и vesa не найден, тогда X обратится к режиму KMS, который включает ускорение GLAMOR (смотрите modesetting(4)).

Для того, чтобы ускорение видео работало, и часто для того, чтобы разблокировать все режимы, в которых может работать GPU, требуется правильный видеодрайвер:

Бренд | Тип | Документация | Драйвер | OpenGL | OpenGL (multilib) | Vulkan | Vulkan (multilib)
--- | --- | --- | --- | --- | --- | --- | ---
AMD (ранее ATI) | Свободный | AMDGPU | xf86-video-amdgpu | mesa | lib32-mesa | vulkan-radeon / amdvlk4 | lib32-vulkan-radeon / lib32-amdvlk4
ATI | xf86-video-ati | Нет
Проприетарный | AMDGPU PRO | xf86-video-amdgpu | amdgpu-pro-oglpAUR | lib32-amdgpu-pro-oglpAUR | vulkan-amdgpu-proAUR | lib32-vulkan-amdgpu-proAUR
Intel | Свободный | Intel graphics | xf86-video-intel2 | mesa or mesa-amber3 | lib32-mesa | vulkan-intel | lib32-vulkan-intel
NVIDIA | Свободный | Nouveau1 | xf86-video-nouveau | mesa | lib32-mesa | Нет5
Проприетарный | NVIDIA1 | nvidia | nvidia-utils | lib32-nvidia-utils | nvidia-utils | lib32-nvidia-utils
nvidia-470xx-dkmsAUR | nvidia-470xx-utilsAUR | lib32-nvidia-470xx-utilsAUR | nvidia-470xx-utilsAUR | lib32-nvidia-470xx-utilsAUR
nvidia-390xx-dkmsAUR | nvidia-390xx-utilsAUR | lib32-nvidia-390xx-utilsAUR | nvidia-390xx-utilsAUR | lib32-nvidia-390xx-utilsAUR

1. Если вы пользуетесь ноутбуком с поддержкой NVIDIA Optimus, который использует интегрированную видеокарту вместе с дискретной, обратитесь к статье NVIDIA Optimus (Русский).
2. Чтобы узнать доступные драйверы для графики Intel 4-го поколения и выше, смотрите статью Intel graphics (Русский)#Установка.
3. Классические драйверы OpenGL (не-Gallium3D) для старого оборудования (в Mesa 22.0 и выше поддержка классического драйвера i915 прекращена)
4. Рекомендуется vulkan-radeon / lib32-vulkan-radeon вместо amdvlk / lib32-amdvlk (смотрите AMDGPU#Installation).
5. NVK, экспериментальный свободный драйвер Vulkan для видеокарт NVIDIA, как ожидается, будет добавлен в mesa 23.3

Другие видеодрайверы можно найти в группе xorg-drivers.

Xorg должен нормально работать без проприетарных драйверов, которые обычно требуются только для дополнительных возможностей, таких как аппаратное ускорение 3D-рендеринга в играх. Исключением из этого правила являются новейшие графические процессоры (особенно видеокарты NVIDIA), которые не поддерживаются драйверами с открытым исходным кодом.

#### AMD

Соответствие между моделью (например, Radeon RX 6800) и архитектурой GPU (например, RDNA 2) можно посмотреть здесь: Wikipedia:ru:Список графических процессоров AMD.

Архитектура GPU | Свободный драйвер | Проприетарный драйвер
--- | --- | ---
RDNA и новее | AMDGPU | AMDGPU PRO
GCN 3 и новее
GCN 1 и 2 | AMDGPU1 / ATI | недоступен
TeraScale и более старые | ATI | недоступен

1. Экспериментальный.

## Запуск

Команду Xorg(1) обычно не используют для запуска. Вместо этого оконный сервер X запускают с помощью экранного менеджера или xinit.

Совет: Вам, скорее всего, понадобится оконный менеджер или среда рабочего стола в дополнение к X.

## Настройка

Примечание: Arch предоставляет файлы конфигурации по умолчанию в `/usr/share/X11/xorg.conf.d/`. Большинству пользователей никакая дополнительная настройка не нужна.

Xorg можно настроить через файл `xorg.conf` и файлы с расширением `.conf`: полный список каталогов, в которых ищутся эти файлы, есть в xorg.conf(5) вместе с подробным объяснением всех доступных опций.

### Через файлы .conf

Каталог `/etc/X11/xorg.conf.d/` хранит конфигурацию, специфичную для хоста (вашего компьютера). Вы можете свободно добавлять конфигурационные файлы сюда, но они обязательно должны оканчиваться на `.conf`: файлы читаются в алфавитном порядке и по соглашению их имена начинаются с `XX-` (две цифры и дефис; таким образом, например, файл, начинающийся на 10, читается раньше файла, начинающегося на 20). Эти файлы анализируются X-сервером при запуске и рассматриваются как часть традиционного конфигурационного файла `xorg.conf`. Обратите внимание, что при наличии конфликтующих настроек будут применены настройки из последнего прочитанного файла. Поэтому наиболее общие файлы конфигурации должны быть первыми в алфавитном порядке. Настройки из файла `xorg.conf` обрабатываются в самом конце.

Смотрите также примеры настроек в Fedora Wiki.

### Через файл xorg.conf

Xorg также можно настраивать через `/etc/X11/xorg.conf` или `/etc/xorg.conf`. Чтобы сгенерировать основу файла `xorg.conf`:

    # Xorg :0 -configure

Это создает файл `xorg.conf.new` в `/root/`, который можно скопировать в `/etc/X11/xorg.conf`.

Совет: Если вы уже запустили X, тогда используйте другой дисплей, например `Xorg :2 -configure`.

Кроме того, ваш проприетарный видеодрайвер может поставляться с инструментом для автоматической настройки Xorg: смотрите статьи NVIDIA (Русский) или AMDGPU PRO (Русский) для подробностей.

Примечание: Ключевые слова файла конфигурации не учитывают регистр, а символы "_" игнорируются. Большинство строк (включая имена опций) также нечувствительны к регистру и к пробелам, да к символам "_".

## Устройства ввода

Для устройств ввода в X по умолчанию используют драйвер libinput (xf86-input-libinput), но также можно использовать драйвер xf86-input-evdev и другие соответствующие драйверы.[1]

Udev, являющийся зависимостью systemd, обнаруживает оборудование, и поэтому оба драйвера будут работать в режиме горячего подключения устройств ввода практически для всех устройств, как определенно в стандартных конфигурационных файлах `10-quirks.conf` и `40-libinput.conf` в каталоге `/usr/share/X11/xorg.conf.d/`.

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

    $ grep -e "Using input driver " Xorg.0.log

Если оба драйвера не поддерживают конкретное устройство, установите необходимый драйвер из группы xorg-drivers. То же самое относится, если вы желаете использовать другой драйвер.

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

Конкретные инструкции есть в статье libinput и в упомянутых ниже статьях, а дополнительные примеры можно посмотреть в Fedora Wiki.

### Идентификация ввода

Смотрите Keyboard input (Русский)#Определение кодов клавиш в Xorg.

### Ускорение мыши

Смотрите Mouse acceleration.

### Дополнительные кнопки мыши

Смотрите кнопки мыши.

### Тачпад

Смотрите libinput или Touchpad Synaptics (Русский).

### Тачскрин

Смотрите Touchscreen.

### Настройка клавиатуры

Смотрите конфигурация клавиатуры в Xorg.

## Настройка монитора

### Ручная настройка

Примечание:

- Новые версии Xorg автоматически всё настраивают, поэтому ручная настройка чаще всего не требуется.
- Если Xorg не может обнаружить монитор или если автонастройка не нужна, можно использовать файл конфигурации. Распространённым случаем, когда это необходимо, является система без монитора (headless), которая автоматически запускает Xorg либо с виртуальной консоли при входе, либо с экранного менеджера.

Для системы без монитора необходим драйвер xf86-video-dummy. Установите его и создайте файл конфигурации, например, с таким содержанием:

    /etc/X11/xorg.conf.d/10-headless.conf

    Section "Monitor"
            Identifier "dummy_monitor"
            HorizSync 28.0-80.0
            VertRefresh 48.0-75.0
            Modeline "1920x1080" 172.80 1920 2040 2248 2576 1080 1081 1084 1118
    EndSection

    Section "Device"
            Identifier "dummy_card"
            VideoRam 256000
            Driver "dummy"
    EndSection

    Section "Screen"
            Identifier "dummy_screen"
            Device "dummy_card"
            Monitor "dummy_monitor"
            SubSection "Display"
            EndSubSection
    EndSection

### Несколько мониторов

Смотрите главную статью Multihead для получения общей информации.

#### Более одной видеокарты

Вы должны определить нужный драйвер для использования и ввести ID шины (bus ID) нужной видеокарты (в десятичном виде).

    Section "Device"
        Identifier             "Screen0"
        Driver                 "intel"
        BusID                  "PCI:0:2:0"
    EndSection

    Section "Device"
        Identifier             "Screen1"
        Driver                 "nouveau"
        BusID                  "PCI:1:0:0"
    EndSection

Чтобы узнать ID шины (в шестнадцатеричном виде):

    $ lspci | grep -e VGA -e 3D

    00:02.0 VGA compatible controller: Intel Corporation HD Graphics 630 (rev 04)
    01:00.0 3D controller: NVIDIA Corporation GP107M [GeForce GTX 1050 Mobile] (rev a1)

ID шины здесь `0:2:0` и `1:0:0`.

### Размер дисплея и DPI

По умолчанию Xorg всегда устанавливает DPI равным 96, начиная с 2009 года [2]. В версии 21.1 было добавлено корректное автоопределение DPI, но оно было убрано (FS#72661).

Задать DPI для X-сервера можно с помощью опции командной строки `-dpi`.

Наличие правильного DPI особенно необходимо, когда требуются точные детали (например, рендеринг шрифтов). Ранее производители пытались создать стандарт для 96 DPI (монитор с диагональю размером 10,3 дюйма был бы 800x600, 13,2-дюймовый монитор - 1024x768). Сейчас DPI экранов отличаются и могут быть не равными по горизонтали и по вертикали. Например, 19-дюймовый широкоэкранный ЖК-дисплей с разрешением 1440x900 может иметь DPI 89х87.

Чтобы убедиться, что разрешение вашего дисплея и DPI обнаружены/правильно рассчитаны:

    $ xdpyinfo | grep -B2 resolution

Убедитесь, что выведенные размеры (dimensions) соответствуют настоящему размеру вашего монитора.

Если вы знаете физический размер экрана, его можно ввести в конфигурационный файл Xorg так, чтобы был рассчитан правильный DPI (измените `Identifier` в соответствии с выводом вашего xrandr):

    Section "Monitor"
        Identifier             "DVI-D-0"
        DisplaySize             286 179    # В миллиметрах
    EndSection

Если вы только хотите ввести спецификацию вашего монитора без создания полного xorg.conf, тогда создайте новый конфигурационный файл. Например, (`/etc/X11/xorg.conf.d/90-monitor.conf`):

    Section "Monitor"
        Identifier             "<default monitor>"
        DisplaySize            286 179    # В миллиметрах
    EndSection

Примечание: Если вы используете проприетарный драйвер NVIDIA, возможно, понадобится добавить `Option "UseEdidDpi" "FALSE"` в разделе `Device` или `Screen`, чтобы эти настройки начали действовать.

Если вы не знаете ширину и высоту монитора (сейчас в большинстве спецификаций указывается только размер диагонали), вы можете использовать родное разрешение монитора (или соотношение сторон) и размер диагонали для вычисления ширины и высоты. Используя теорему Пифагора для монитора с диагональю 13,3" и с родным разрешением 1280x800 (или соотношением сторон 16:10):

    $ echo 'scale=5;sqrt(1280^2+800^2)' | bc  # 1509.43698

Вы получите размер диагонали в пикселях. С помощью него можно узнать ширину и высоту монитора в дюймах (а затем перевести их в миллиметры):

    $ echo 'scale=5;(13.3/1509)*1280*25.4' | bc  # 286.43072
    $ echo 'scale=5;(13.3/1509)*800*25.4'  | bc  # 179.01920

Примечание: Эти вычисления работают для мониторов с квадратными пикселями; однако иногда встречаются мониторы, сжимающие соотношение сторон (например, разрешение изображения на мониторе с 16:10 до 16:9). В этом случае придётся измерить размер монитора руками.

#### Настройка DPI вручную

Примечание: Хотя вы можете установить любой dpi и приложения, использующие Qt и GTK, будут масштабироваться соответственно, рекомендуется устанавливать dpi в 96, 120 (на 25% больше), 144 (на 50% больше), 168 (на 75% больше), 192 (на 100% больше) и так далее, чтобы уменьшить артефакты, которые могут возникнуть при масштабировании элементов интерфейса, использующих растровые изображения. Уменьшение dpi ниже 96 может не привести к уменьшению размера элементов интерфейса, так как обычно наименьшее значение dpi, на которое сделаны значки, равно 96.

Для RandR-совместимых драйверов (например, драйвер ATI с открытым исходным кодом) вы можете установить dpi так:

    $ xrandr --dpi 144

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

Чтобы сделать его постоянным, посмотрите запуск команд после запуска X.

##### Проприетарный драйвер NVIDIA

Вы можете установить DPI вручную, добавив в раздел `Device` или `Screen`:

    Option              "DPI" "96 x 96"

##### Предостережение о ручной настройке DPI

GTK очень часто переопределяет DPI сервера через опциональный Xresource `Xft.dpi`. Чтобы выяснить, происходит ли это у вас, выполните:

    $ xrdb -query | grep dpi

Начиная с версии GTK 3.16, если эта переменная явно не задана, GTK задаёт ей значение 96. Чтобы приложения GTK работали с DPI сервера, потребуется явно задать в `Xft.dpi` то же значение, что и у сервера. Некоторые среды рабочего стола также используют `Xft.dpi` при изменении DPI через настройки среды — например, KDE и TDE.

### Управление питанием дисплея

DPMS (Display Power Management Signaling (англ), сигналы управления энергопотреблением дисплеев) — технология, позволяющая настроить энергосбережение монитора, когда компьютер не используется. Она позволит вам автоматически переключить монитор в режим ожидания через определенное время простоя.

## Композит

Расширение Composite для X позволяет вывести всё поддерево иерархии окон в буфер вне экрана. Затем приложения могут загружать содержимое этого буфера и делать с ним всё, что им заблагорассудится. Закадровый буфер может автоматически объединяться в родительское окно или объединяться внешними программами, называемыми композитными менеджерами. Для получения дополнительной информации смотрите статью Wikipedia:ru:Композитный менеджер окон.

Некоторые оконные менеджеры (например, Compiz, Enlightenment, KWin, Marco, Metacity, Muffin, Mutter, Xfwm) имеют встроенный композитинг. Для других оконных менеджеров можно использовать отдельные композитные менеджеры.

### Список композитных менеджеров

- Picom — Легкий композитор с функциями добавления теней, размытия и выцветания. Форк Compton.

  https://github.com/yshui/picom || picom

- Xcompmgr — Композитный оконный менеджер.

  https://gitlab.freedesktop.org/xorg/app/xcompmgr/ || xcompmgr

- Gamescope — Микрокомпозитор от Valve с возможностями, ориентированными на игры, такими как масштабирование с помощью FSR. Форк steamos-compositor.

  https://github.com/ValveSoftware/gamescope || gamescope

- steamos-compositor-plus — Композитор от Valve с некоторыми дополнительными исправлениями и доработками.

  https://github.com/chimeraos/steamos-compositor-plus || steamos-compositor-plusAUR

## Советы и рекомендации

### Автоматизация

В этом разделе перечислены утилиты для автоматизации операций с окнами (например, перемещение, изменение размера или фокусировка), ввода/вывода клавиатуры и мыши.

Утилита | Пакет | Документация | Эмуляция клавиш | Операции с окнами | Примечание
--- | --- | --- | --- | --- | ---
xautomation | xautomation | xte(1) | Да | Нет | Также содержит инструменты для анализа содержимого экрана (screen scraping). Не может эмулировать F13+.
xdo | xdo | xdo(1) | Нет | Да | Небольшая утилита X для выполнения элементарных действий над окнами.
xdotool | xdotool | xdotool(1) | Да | Да | Очень забагованный и находится в неактивной разработке, например: имеет сломанный CLI parsing.[3][4]
xvkbd | xvkbdAUR | xvkbd(1) | Да | Нет | Виртуальная клавиатура для Xorg, также имеет параметр `-text` для отправки символов.
AutoKey | autokey-qtAUR autokey-gtkAUR | documentation | Да | Да | Высокоуровневая мощная утилита для работы с макросами и скриптами, имеющая интерфейсы Qt и GTK.

Смотрите также Буфер обмена#Инструменты и обзор средств автоматизации X.

### Вложенная X-сессия

Для запуска вложенного сеанса другой среды рабочего стола:

    $ /usr/bin/Xnest :1 -geometry 1024x768+0+0 -ac -name Windowmaker & wmaker -display :1

Это запустит сеанс Window Maker в окне 1024 на 768 в рамках текущей X-сессии.

Для этого необходим установленный пакет xorg-server-xnest.

Более современный подход — использование Xephyr.

### Запуск приложения без оконного менеджера

Смотрите xinit (Русский)#Запуск приложений без оконного менеджера.

### Запуск графических программ удалённо

Смотрите основную статью: Secure Shell (Русский)#Проброс X11.

### Отключение и включение устройств ввода при необходимости

С помощью xinput вы можете временно отключить или включить устройства ввода. Это полезно, например, на системах, имеющих несколько мышек, таких как ThinkPad, и вам хотелось бы использовать только одну, чтобы избежать случайные нажатия.

Установите пакет xorg-xinput.

Найдите имя или ID устройства, которое вы хотите отключить:

    $ xinput

Например для ноутбука Lenovo ThinkPad T500 вывод выглядит следующим образом:

    $ xinput

    ⎡ Virtual core pointer                          id=2    [master pointer  (3)]
    ⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
    ⎜   ↳ TPPS/2 IBM TrackPoint                     id=11   [slave  pointer  (2)]
    ⎜   ↳ SynPS/2 Synaptics TouchPad                id=10   [slave  pointer  (2)]
    ⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
        ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
        ↳ Power Button                              id=6    [slave  keyboard (3)]
        ↳ Video Bus                                 id=7    [slave  keyboard (3)]
        ↳ Sleep Button                              id=8    [slave  keyboard (3)]
        ↳ AT Translated Set 2 keyboard              id=9    [slave  keyboard (3)]
        ↳ ThinkPad Extra Buttons                    id=12   [slave  keyboard (3)]

Отключить устройство можно командой `xinput --disable устройство`, где устройство это ID устройства или имя устройства, которое вы хотите отключить. В следующем примере мы отключим тачпад Synaptics с ID 10:

    $ xinput --disable 10

Чтобы снова включить устройство, просто выполните противоположную команду:

    $ xinput --enable 10

Так выглядит команда для выключения устройства (здесь тачпада) через его имя:

    $ xinput --disable "SynPS/2 Synaptics TouchPad"

### Постоянное отключение устройства ввода

Полностью отключить определённое устройство ввода можно с помощью такой настройки:

    /etc/X11/xorg.conf.d/30-disable-устройство.conf

    Section "InputClass"
           Identifier   "disable-устройство"
           Driver       "имя_драйвера"
           MatchProduct "имя_устройства"
           Option       "Ignore" "True"
    EndSection

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

### Закрытие приложения с помощью горячей клавиши

Привяжите скрипт к горячей клавише:

    #!/bin/sh
    windowFocus=$(xdotool getwindowfocus)
    pid=$(xprop -id "$windowFocus" | grep PID)
    kill -9 "$pid"

Зависимости: xorg-xprop, xdotool

Смотрите также #Визуальное закрытие приложения.

### Блокирование доступа к TTY

Чтобы запретить доступ к tty при нахождении в сеансе X, добавьте следующее в файл xorg.conf:

    Section "ServerFlags"
        Option "DontVTSwitch" "True"
    EndSection

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

### Запрет пользователю закрывать, перезапускать X

Чтобы запретить пользователю закрывать, перезапускать запущенный Xorg, добавьте следующее в файл xorg.conf:

    Section "ServerFlags"
        Option "DontZap"      "True"
    EndSection

Примечание: Непосредственно к завершению работы X-сервера приводит не сочетание клавиш `Ctrl+Alt+Backspace`, а действие `Terminate_Server` из раскладки клавиатуры (keyboard map). По умолчанию это действие обычно не установлено; смотрите Конфигурация клавиатуры в Xorg#Завершение Xorg по сочетанию клавиш Ctrl+Alt+Backspace.

### Визуальное закрытие приложения

Если приложение ведёт себя некорректно или зависло, вместо использования `kill` или `killall` из терминала и необходимости искать идентификатор или имя процесса можно использовать xorg-xkill, который позволяет щёлкнуть по окну проблемного приложения, чтобы закрыть его соединение с X-сервером. Многие существующие приложения действительно завершают свою работу (abort) при закрытии соединения с X-сервером, но некоторые могут продолжить работу.

### Использование Xorg без прав суперпользователя

Xorg может запускаться с привилегиями обычного пользователя вместо root (так называемый «Rootless Xorg»). Это значительно повышает безопасность по сравнению с запуском от имени суперпользователя. Обратите внимание, что некоторые популярные экранные менеджеры не поддерживают rootless Xorg (например, LightDM или XDM).

Проверить, от имени какого пользователя запущен Xorg, можно с помощью команды `ps -o user= -C Xorg`.

Смотрите также Xorg.wrap(1), systemd-logind(8), systemd/Пользователь#Xorg как пользовательская служба systemd, Fedora:Changes/XorgWithoutRootRights и FS#41257.

#### Через xinitrc

Чтобы настроить запуск rootless Xorg с использованием xinitrc:

- Запускайте startx как подпроцесс оболочки входа (login shell); запускайте `startx` напрямую и не используйте `exec startx`.
- Убедитесь, что Xorg использует виртуальный терминал, для которого были установлены права доступа, то есть который logind передал в `$XDG_VTNR` через .xserverrc.
- При использовании некоторых проприетарных драйверов дисплея автоопределение kernel mode setting может оказаться неудачным. В этом случае в файле `/etc/X11/Xwrapper.config` укажите `needs_root_rights = no`.

#### Через GDM

При использовании kernel mode setting по умолчанию GDM запускает Xorg без прав root.

#### Перенаправление журнала сеанса

Пока журналы пользователя Xorg хранятся в `~/.local/share/xorg/Xorg.log`, они не включают вывод X-сессии. Чтобы повторно включить перенаправление, запустите X с флагом `-keeptty`:

    startx -- -keeptty >~/.xorg.log 2>&1

Или скопируйте `/etc/X11/xinit/xserverrc` в `~/.xserverrc` и добавьте `-keeptty`. Для получения дополнительной информации смотрите [5].

### Использование Xorg с правами суперпользователя

Как упоминалось выше, иногда по умолчанию используется Xorg без права root. Если это ваш случай и у вас есть необходимость запускать Xorg от имени root, вы можете настроить Xorg.wrap(1) на требование root:

Важно: Запуск Xorg от имени root создаёт проблемы безопасности. Подробнее в разделе #Использование Xorg без прав суперпользователя.

    /etc/X11/Xwrapper.config

    needs_root_rights = yes

## Решение проблем

### Общее

Если произошла какая-то проблема с X, посмотрите лог (журнал), хранящийся в `/var/log/` или для пользователей без рут-доступа в `~/.local/share/xorg/` (по умолчанию с версии 1.16). Пользователям GDM следует проверить журнал systemd. [6]

Файлы журналов имеют следующий вид `Xorg.n.log`, где `n` — номер дисплея. Для однопользовательского компьютера с настройками по умолчанию имя нужного журнала обычно `Xorg.0.log`, но для остальных оно может отличаться. Чтобы убедиться, что выбранный вами файл правильный, посмотрите временную отметку запуска сеанса X сервера и из какой консоли он был запущен. Например:

    $ grep -e Log -e tty Xorg.0.log

    [    40.623] (==) Log file: "/home/archuser/.local/share/xorg/Xorg.0.log", Time: Thu Aug 28 12:36:44 2014
    [    40.704] (--) controlling tty is VT number 1, auto-enabling KeepTty

Совет: Для мониторинга журнала с человекочитаемыми временными метками можно запустить tail(1) и перенаправить его вывод в ts(1) (предоставляется пакетом moreutils). При этом временные метки будут корректными только для строк, добавленных в журнал во время работы команды. Например:

    $ tail -f ~/.local/share/xorg/Xorg.0.log | ts

- При просмотре журнала будьте внимательны к строкам, начинающимся с `(EE)`, которые обозначают ошибки, и к строкам `(WW)`, которые предупреждают об возможных других проблемах.
- Если файл `.xinitrc` пустой в `$HOME`, то его необходимо или удалить, или изменить для правильной загрузки X. Не сделав этого, вы получите пустой экран, а в журнале возможно `Xorg.0.log` не будет ошибок. Просто удалив его, у вас будет запускаться стандартное окружение X.
- Если экран становится чёрным, вы всё ещё можете попытаться переключиться на другую виртуальную консоль (например, `Ctrl+Alt+F6`), и вслепую войти в систему как root. Чтобы сделать это, введите логин `root` (нажмите `Enter` после ввода), а потом введите пароль (снова нажмите `Enter` после ввода).

  Вы можете попытаться завершить X сервер через:

      # pkill -x X

  Если это не сработало, просто перезагрузитесь:

      # reboot

- Если у вас проблемы с устройствами ввода (клавиатурой, мышкой, тачпадом, и т.д.), смотрите страницы в Category:Input devices (Русский).
- Смотрите также решение проблем в статьях AMDGPU (Русский), Intel graphics (Русский) и NVIDIA (Русский).

### Чёрный экран, No protocol specified, Resource temporarily unavailable для всех или некоторых пользователей

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

### DRI с картами Matrox перестает работать

Если вы используете карту Matrox и DRI перестал работать после обновления Xorg, попробуйте добавить строку:

    Option "OldDmaInit" "On"

в раздел `Device`, который ссылается на видеокарту в `xorg.conf`.

### Проблемы с режимом Фреймбуфер

Если X не запускается со следующим сообщением в журнале,

    (WW) Falling back to old probe method for fbdev
    (II) Loading sub module "fbdevhw"
    (II) LoadModule: "fbdevhw"
    (II) Loading /usr/lib/xorg/modules/linux//libfbdevhw.so
    (II) Module fbdevhw: vendor="X.Org Foundation"
           compiled for 1.6.1, module version=0.0.2
           ABI class: X.Org Video Driver, version 5.0
    (II) FBDEV(1): using default device

    Fatal server error:
    Cannot run in framebuffer mode. Please specify busIDs for all framebuffer devices

Удалите пакет xf86-video-fbdev.

### Программа требует "font '(null)'"

Сообщение об ошибке: `unable to load font `(null)'`.

Некоторые программы работают только с растровыми шрифтами. Имеется два крупных пакета с растровыми шрифтами xorg-fonts-75dpi и xorg-fonts-100dpi. Вам не нужны оба; одного будет достаточно. Чтобы выяснить какой будет лучше в вашем случае, попробуйте утилиту `xdpyinfo` из пакета xorg-xdpyinfo таким образом:

    $ xdpyinfo | grep resolution

и используйте тот шрифт, у которого dpi ближе к показанному значению.

### Восстановление: отключение Xorg перед входом в GUI

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

- Изменить цель по умолчанию на `rescue.target`. Для получения дополнительной информации смотрите systemd (Русский)#Изменение цели загрузки по умолчанию.
- Если у вас не только сломанная система, которая делает Xorg непригодным для использования, но также задержка меню GRUB установлена в ноль, или никак иначе нельзя использовать GRUB для предотвращения загрузки Xorg, вы можете использовать установочный образ Arch Linux. Следуйте руководству по установке до момента монтирования разделов и выполните chroot в установленный Arch Linux. Другой вариант — попытайтесь переключиться на другую tty с помощью сочетания клавиш `Ctrl+Alt` + функциональная клавиша (обычно от `F1` до `F7` в зависимости от того, на какой не запущен X), войдите как root и следуйте шагам ниже.

В зависимости от настройки, вам необходимо выполнить один или более шагов:

- Отключите экранный менеджер.
- Отключите автозапуск X при входе в систему.
- Переименуйте файл `~/.xinitrc` или закомментируйте в нём строку с `exec`.

### Клиент X запускается с ошибкой "su"

Если вы получаете сообщение `Client is not authorized to connect to server` (Клиент не авторизован для подключения к серверу), попробуйте добавить строку:

    session        optional        pam_xauth.so

в `/etc/pam.d/su` и `/etc/pam.d/su-l`. Затем `pam_xauth` правильно установит переменные окружения и обработает ключи `xauth`.

### Не удалось запустить X: Ошибка инициализации клавиатуры

Если файловая система (в частности `/tmp`) заполнена, `startx` не запустится. В конце журнала `/var/log/Xorg.0.log` будет:

    (EE) Error compiling keymap (server-0)
    (EE) XKB: Could not compile keymap
    (EE) XKB: Failed to load keymap. Loading default keymap instead.
    (EE) Error compiling keymap (server-0)
    (EE) XKB: Could not compile keymap
    XKB: Failed to compile keymap
    Keyboard initialization failed. This could be a missing or incorrect setup of xkeyboard-config.
    Fatal server error:
    Failed to activate core devices.
    Please consult the The X.Org Foundation support at http://wiki.x.org
    for help.
    Please also check the log file at "/var/log/Xorg.0.log" for additional information.
    (II) AIGLX: Suspending AIGLX clients for VT switch

Освободите место на соответствующей файловой системе, и X сервер запустится.

### Зелёный экран при попытке просмотра видео

У вас неправильно установлена цветовая глубина. Например, требуется 24 вместо 16.

### Ошибка SocketCreateListener

Если X завершаются с сообщением об ошибке `SocketCreateListener() failed`, удалите файлы сокета в `/tmp/.X11-unix`. Это может происходить после того, как вы ранее запускали Xorg с правами суперпользователя (например, для создания `xorg.conf`).

### Неверный ключ MIT-MAGIC-COOKIE-1 при попытке запустить программу от имени суперпользователя

Эта ошибка означает, что только текущий пользователь имеет доступ к X-серверу. Решение состоит в том, чтобы предоставить доступ для суперпользователя:

    $ xhost +si:localuser:root

Эта строка также может быть использована для предоставления доступа к X другому пользователю, нежели root.

### Фатальная ошибка сервера: (EE) AddScreen/ScreenInit

Если Xorg-server не работает случайным образом и в логе Xorg вы видите:

    systemd-logind: failed to take device /dev/dri/card0: Operation not permitted
    ...
    AddScreen/ScreenInit failed for driver 0

Тогда это может быть вызвано проблемой systemd #134943. Настройте ранний запуск KMS.

## Смотрите также

- Xplain — подробное объяснение оконной системы X
- Xorg(1) — справочная страница Xorg
- Prepare for LPIC-1 exam 2 - topic 106.1: X11 — кратко описывает архитектуру, настройку, среды рабочего стола, удалённое использование, Wayland.
- xorg.conf(5)
- Gentoo:Xorg/Guide#Configuration — статья о конфигурации Xorg на Gentoo Wiki

Category:

- X server (Русский)