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

# xinitrc (Русский)

Состояние перевода: На этой странице представлен перевод статьи Xinitrc. Дата последней синхронизации: 3 сентября 2015‎. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Related articles

- Display manager (Русский)
- Start X at login
- Xorg (Русский)
- xprofile (Русский)
- Ресурсы Х

Файл `~/.xinitrc` представляет собой шелл-скрипт передаваемый `xinit` посредством команды `startx`. Он используется для запуска Среды рабочего стола, Оконного менеджера и других программ запускаемых с X сервером (например запуска демонов, и установки переменных окружений. Программа `xinit` запускает Xorg сервер и работает в качестве программы первого клиента на системах не использующих Экранный менеджер.

Одной из основных функций `~/.xinitrc` является указание, какой клиент X Window System будет запущен каждому пользователю при вызове `startx` или `xinit`. Существует множество дополнительных настроек и команд, которые также могут быть добавлены в `~/.xinitrc` согласно вашей дальнейшей настройке системы.

Большинство DMs также используют подобный xprofile перед xinit.

## Установка

Установите xorg-xinit, чтобы использовать xinit и startx.

## Настройка

Если `.xinitrc` присутствует в домашнем каталоге пользователя, startx и xinit выполнят его. Иначе startx выполнит `/etc/X11/xinit/xinitrc`. Это запустит основную среду с Twm, xorg-xclock и Xterm (при условии, что необходимые пакеты установлены). Xinit меет собственное поведение по умолчанию вместо выполнения файла. Смотрите `man 1 xinit` для подробностей. Поэтому, чтобы использовать другой оконный менеджер или окружение рабочего стола, сначала создайте копию по умолчанию `xinitrc`:

    $ cp /etc/X11/xinit/xinitrc ~/.xinitrc

Это делается так (вместо создания с нуля) чтобы сохранить некоторое желаемое поведение по умолчанию в исходном файле, например, поиске скриптов из `/etc/X11/xinit/xinitrc.d`. Сценарии в этом каталоге без `.sh` расширения не считаются исходным кодом: FS#41471. Таким образом, измените `/etc/X11/xinit/xinitrc.d/?*` на `/etc/X11/xinit/xinitrc.d/?*.sh`. [1]

Добавьте нужные команды и удалите/закомментируйте противоречивые строки. Помните, строки, следующие после `exec` будут игнорироваться. Например:

    ~/.xinitrc

    ...

    if [ -d /etc/X11/xinit/xinitrc.d ] ; then
        for f in /etc/X11/xinit/xinitrc.d/?* ; do
            [ -x "$f" ] && . "$f"
        done
        unset f
    fi

    # twm &
    # xclock -geometry 50x50-1+1 &
    # xterm -geometry 80x50+494+51 &
    # xterm -geometry 80x20+494-0 &
    # exec xterm -geometry 80x66+0+0 -name login

    xscreensaver &
    xsetroot -cursor_name left_ptr &
    exec openbox-session

Примечание: По крайней мере, убедитесь, что блок if в примере выше, присутствует в вашем файле `.xinitrc` для того чтобы подать скрипт `/etc/X11/xinit/xinitrc.d/30-dbus.sh`. Иначе сессия D-Bus не будет запущена.

Долговыполняемые программы стартуют перед оконным менеджером, такие как заставки и обои приложения. Они должны либо сами выполняться параллельно, либо работать в фоновом режиме (добавьте знак `&`). Иначе, сценарий остановится и будет ждать каждую программу, чтобы закончить перед запуском оконного менеджера. Обратите внимание, что некоторые программы не должны стартовать параллельно, во избежании потока ошибок, как в случае с xrdb. Подготовка `exec` заменит процесс скрипта с процессом оконного менеджера, так что Х не завершится, даже если этот процесс распараллелен в фоне.

Для запуска Xorg от имени обычного пользователя, выполните:

    $ startx

или

    $ xinit -- :1 -nolisten tcp vt$XDG_VTNR

Выбранный вами оконный менеджер теперь запустится правильно.

Для выхода из X, запустите функцию выхода вашего оконного менеджера (при условии, что он есть). Если нет такой возможности, запустите:

    $ pkill -15 Xorg

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

    WM_PID=$(xprop -id $(xprop -root _NET_SUPPORTING_WM_CHECK \
    | awk -F'#' '{ print $2 }') _NET_WM_PID \
    | awk -F' = ' '{ print $2 }')

    kill -15 $WM_PID

Программа `xprop` доступна в пакете xorg-xprop из Официальных репозиториев.

Примечание:

- Команды запускают Xorg на томже виртуальном терминале, в который вошёл пользователь. [2] Это поддерживает авторизованную сессию с `logind`, и предотвращает обход блокировщика экрана, при переключении терминалов.
- Вы должны указать `vt$XDG_VTNR` в качестве опции командной строки для xinit чтобы сохранить права сессии (preserve session permissions).
- xinit не обрабатывает несколько сеансов, когда вы уже вошли в другой виртуальный терминал. Для этого необходимо указать сессию добавления `-- :session_no`. Если X уже запущен, то вы должны начать с: 1 или больше.
- По умолчанию, экран X должен быть на том же терминале, где и произошел вход. Это обрабатывается `/etc/X11/xinit/xserverrc` по умолчанию. Смотрите General troubleshooting#Session permissions для подробностей.
- Если вы хотите получить экран Х отдельно от консоли вызова сервера X, вы можете сделать это при помощи оболочки X сервера `/usr/lib/systemd/systemd-multi-seat-x`. Для удобства startx может быть настроен на использование этой оболочки, изменяя ваш`~/.xserverrc`.
- Если вы решите использовать xinit вместо startx, тогда вы несете ответственность за прохождение `-nolisten tcp` и обеспечение не сломанной сессии запуская X на другом tty.
- Если X завершает с сообщением об ошибке "SocketCreateListener() failed", вам возможно потребуется удалить файлы сокетов в `/tmp/.X11-unix`. Это может произойти, если ранее Xorg был выполнен от root.

## Автозапуск X при входе в систему

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

Для Bash, добавьте следующее в нижнюю часть `~/.bash_profile`. Если файл не существует, скопируйте шаблон-версию с `/etc/skel/.bash_profile`. Для Zsh, добавьте в `~/.zlogin` (или в `~/.zprofile`).

    [[ -z $DISPLAY && $XDG_VTNR -eq 1 ]] && exec startx

Примечание:

- Вы можете заменить `-eq 1` по сравнению с `-le 3` (от vt1 до vt3) если вы хотите использовать графические логины на более чем одном VT.
- Чтобы сохранить ссессию logind, Х должен всегда работать на томже терминале, где произошел Вход (логин). Это работает по умолчанию `/etc/X11/xinit/xserverrc`.
- `xinit` может быть быстрее, чем `startx`, но нужны дополнительные параметры, например `-nolisten tcp`.
- Если вы хотите оставаться в системе, когда заканчивается Х сессия, удалите `exec`.

Смотрите также Fish#Запуск X при входе в систему и Systemd/User#Automatic login into Xorg without display manager.

### Автоматический вход в виртуальной консоли

Этот метод можно объединить с автоматическим входом в виртуальной консоли. При этом вы должны установить правильные зависимости для выполнения автологина Systemd чтобы убедиться, что dbus запускается до чтения `~/.xinitrc` и старта pulseaudio (see: BBS#155416)

## Советы и хитрости

### Переопределение xinitrc из командной строки

Если у вас есть рабочий `~/.xinitrc`, но хотите попробовать другие WM/DE, вы можете запустить его используя startx с указанием пути к оконному менеджеру:

    $ startx /full/path/to/window-manager

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

    $ startx "/full/path/to/window-manager --key value"

Обратите внимание что требуется полный путь. По желанию, вы можете также переопределить `/etc/X11/xinit/xserverrc` файл (который хранит значение по умолчанию X сервера) с пользовательскими опциями, путем добавления их после `--`, например:

    $ startx /usr/bin/enlightenment -- -nolisten tcp -br +bs -dpi 96 vt$XDG_VTNR

или

    $ xinit /usr/bin/enlightenment -- -nolisten tcp -br +bs -dpi 96 vt$XDG_VTNR

Смотрите также `man startx`.

Совет: Это может быть использовано даже для запуска программ с графическим интерфейсом, но без каких-либо особенностей оконного менеджера. Смотрите также #Запуск приложений без оконного менеджера и Запуск программ в отдельном экране X.

### Создание выбора DE/WM (Окружения рабочего стола/Оконного менеджера)

Если вы часто переключаетесь между различными DEs/WMs, рекомендуется использовать Display manager или добавить код в `.xinitrc`. Следующий код, описанный в нескольких строчках, будет принимать аргумент и загружать желаемое окружение рабочего стола или менеджера окон.

В следующем примере `~/.xinitrc` показано как запустить конкретную DE/WM с аргументом:

    ~/.xinitrc

    ...

    # Xfce передаётся по умолчанию
    session=${1:-xfce}

    case $session in
        awesome           ) exec awesome;;
        bspwm             ) exec bspwm;;
        catwm             ) exec catwm;;
        cinnamon          ) exec cinnamon-session;;
        dwm               ) exec dwm;;
        enlightenment     ) exec enlightenment_start;;
        ede               ) exec startede;;
        fluxbox           ) exec startfluxbox;;
        gnome             ) exec gnome-session;;
        gnome-classic     ) exec gnome-session --session=gnome-classic;;
        i3|i3wm           ) exec i3;;
        icewm             ) exec icewm-session;;
        jwm               ) exec jwm;;
        kde               ) exec startkde;;
        mate              ) exec mate-session;;
        monster|monsterwm ) exec monsterwm;;
        notion            ) exec notion;;
        openbox           ) exec openbox-session;;
        unity             ) exec unity;;
        xfce|xfce4        ) exec startxfce4;;
        xmonad            ) exec xmonad;;
        # Не известная сессия, попробуйте запустить в качестве команды
        *) exec $1;;
    esac

Затем скопируйте файл `/etc/X11/xinit/xserverrc` в ваш домашний каталог:

    $ cp /etc/X11/xinit/xserverrc ~/.xserverrc

После этого, вы можете легко запустить конкретный DE/WM передавая аргумент, например:

    $ xinit
    $ xinit gnome
    $ xinit kde
    $ xinit wmaker

или

    $ startx
    $ startx ~/.xinitrc gnome
    $ startx ~/.xinitrc kde
    $ startx ~/.xinitrc wmaker

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

Можно запустить только определенные приложения без оконного менеджера. Хотя, это будет полезно только для одного приложения, запущенного в полноэкранном режиме. Напирмер:

    ~/.xinitrc

    ...

    exec chromium

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

Совет: Этот метод может быть полезен для запуска графических игр, чтобы улучшить их производительность. Т.к. при таком способе оконный менеджер не будет использовать память и процессор.

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

Categories:

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