Глава 11. X Window System и виртуальные консоли

11.1. Что такое X Window System?
11.2. Я хочу запустить Xorg, как это сделать?
11.3. Я попытался запустить X, но получил сообщение No devices detected. после ввода команды startx. Что мне теперь делать?
11.4. Почему моя мышь не работает с X?
11.5. У моей мыши есть колёсико. Могу ли я его использовать при работе в X?
11.6. Как заставить работать тачпад Synaptics в X?
11.7. Как использовать удалённые X-дисплеи?
11.8. Что такое виртуальные консоли и как изменить их количество?
11.9. Как осуществляется доступ к виртуальным консолям из X?
11.10. Как запустить XDM во время загрузки?
11.11. При запуске xconsole выдаётся сообщение Couldn't open console.
11.12. Моя мышь PS/2 в X работает неправильно.
11.13. Как поменять местами кнопки мыши?
11.14. Как установить экранную заставку и где такие заставки можно найти?
11.15. Можно ли в X использовать клавишу Windows?
11.16. Как заставить работать аппаратное ускорение 3D-графики для OpenGL(R)?

11.1.

Что такое X Window System?

X Window System (обычно X11) является наиболее общедоступной оконной системой, которая может работать на UNIX(R) и UNIX(R)-подобных системах, в том числе и во FreeBSD. Разработкой стандартов на используемый X-протокол занимается организация The X.Org Foundation, с текущей эталонной реализацией version 11 release 7.7, поэтому название часто сокращается до X11.

Для разных архитектур и операционных систем существует множество реализаций этой системы. Реализацию кода для серверной части называют X-сервером.

11.2.

Я хочу запустить Xorg, как это сделать?

Для установки Xorg выполните одно из действий:

Используйте мета-порт x11/xorg, который выполняет построение и установку всех компонентов Xorg.

Используйте x11/xorg-minimal, который выполняет построение и установку только необходимых компонентов Xorg.

Установите Xorg из пакетов FreeBSD.

# pkg install xorg

После установки Xorg следуйте указаниям в разделе Конфигурация X11 Руководства FreeBSD.

11.3.

Я попытался запустить X, но получил сообщение No devices detected. после ввода команды startx. Что мне теперь делать?

Вероятно, в системе установлен повышенный уровень безопасности (securelevel). При повышенном уровне защиты систему X запустить невозможно, потому что X требуются права на операции записи в устройство io(4). Дополнительная информация находится на странице Справочника init(8).

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

Обратитесь к Вопрос: 11.10 для получения более полной информации о запуске xdm(1) во время загрузки.

11.4.

Почему моя мышь не работает с X?

При использовании стандартного драйвера консоли syscons(4) во FreeBSD можно включить поддержку указателя мыши во всех виртуальных экранах. Во избежание конфликтов с X, драйвер syscons(4) поддерживает виртуальное устройство /dev/sysmouse. Все события от реального устройства мыши пишутся в устройство sysmouse(4) через moused(8). Чтобы использовать мышь на одной и более виртуальных консолях, и при этом продолжать использовать X, посмотрите Вопрос: 4.4.1 и настройте moused(8).

Затем отредактируйте /etc/X11/xorg.conf, чтобы в нём были следующие строки:

Section "InputDevice"
   Option	  "Protocol" "SysMouse"
   Option	  "Device" "/dev/sysmouse"
.....

Начиная с версии Xorg 7.4 раздел InputDevice в файле xorg.conf игнорируется, и вместо него используется механизм автоматически определяемых устройств. Чтобы восстановить прежнее поведение, добавьте в раздел ServerLayout или ServerFlags такую строку:

Option "AutoAddDevices" "false"

Некоторые предпочитают использовать в X устройство /dev/mouse. Чтобы оно работало, файл устройства /dev/mouse должен являться ссылкой на /dev/sysmouse (посмотрите справку по sysmouse(4)). Это можно сделать, добавив следующую строку в /etc/devfs.conf (посмотрите справку по devfs.conf(5)):

link    sysmouse    mouse

Ссылка может быть создана путем перезапуска devfs(5) с использованием следующей команды (из под пользователя root):

# service devfs restart

11.5.

У моей мыши есть колёсико. Могу ли я его использовать при работе в X?

Да, если X настроена для использования 5-кнопочной мыши. Для этого добавьте строчки Buttons 5 и ZAxisMapping 4 5 в раздел <<InputDevice>> файла /etc/X11/xorg.conf как показано в этом примере:

Section "InputDevice"
   Identifier      "Mouse1"
   Driver	  "mouse"
   Option	  "Protocol" "auto"
   Option	  "Device" "/dev/sysmouse"
   Option	  "Buttons" "5"
   Option	  "ZAxisMapping" "4 5"
EndSection

Для использования мыши в Emacs также добавьте в ~/.emacs следующие строки:

;; wheel mouse
(global-set-key [mouse-4] 'scroll-down)
(global-set-key [mouse-5] 'scroll-up)

11.6.

Как заставить работать тачпад Synaptics в X?

Для его работы понадобится настроить некоторые вещи.

Чтобы использовать драйвер synaptics из Xorg, для начала удалите строку moused_enable из rc.conf.

Для включения synaptics добавьте следующую строку в /boot/loader.conf:

hw.psm.synaptics_support="1"

Добавьте следующее в /etc/X11/xorg.conf:

Section "InputDevice"
Identifier  "Touchpad0"
Driver      "synaptics"
Option      "Protocol" "psm"
Option      "Device" "/dev/psm0"
EndSection

И не забыть добавить следующее в раздел <<ServerLayout>>:

InputDevice    "Touchpad0" "SendCoreEvents"

11.7.

Как использовать удалённые X-дисплеи?

Из соображений обеспечения информационной безопасности открывать удалённые окна на машине по умолчанию запрещено.

Для включения этой возможности запустите X с аргументом -listen_tcp:

% startx -listen_tcp

11.8.

Что такое виртуальные консоли и как изменить их количество?

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

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

Чтобы запустить ещё один сеанс, скажем, чтобы заглянуть в документацию по программе или для чтения электронной почты во время ожидания завершения передачи данных по FTP, нажмите F2, удерживая Alt. Это отобразит приглашение на второй виртуальной консоли. Чтобы вернуться к первоначальному сеансу, нажмите Alt+F1.

По умолчанию во FreeBSD задействованы восемь виртуальных консолей, а комбинации клавиш Alt+F1, Alt+F2, Alt+F3 и далее служат для переключения между ними.

Чтобы увеличить количество виртуальных консолей, отредактируйте /etc/ttys (смотрите страницу Справочника ttys(5)), добавив туда записи для терминалов с именами от ttyv8 до ttyvc после комментария про <<Virtual terminals>>:

# Edit the existing entry for ttyv8 in /etc/ttys and change
# "off" to "on".
ttyv8   "/usr/libexec/getty Pc"	 xterm  on secure
ttyv9   "/usr/libexec/getty Pc"	 xterm  on secure
ttyva   "/usr/libexec/getty Pc"	 xterm  on secure
ttyvb   "/usr/libexec/getty Pc"	 xterm  on secure

Чем больше виртуальных терминалов, тем больше ресурсов используется. Это может привести к проблемам на системах с 8 Мбайт ОЗУ или меньше. Подумайте о смене статуса консолей с secure на insecure.

Примечание:

Во FreeBSD до версии 9.0 использовался тип терминала <<cons25>> вместо <<xterm>>. При добавлении в /etc/ttys новых записей используйте существующий формат.

Важно:

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

Например, чтобы запустить X и 11 виртуальных консолей, нужно настроить двенадцатый виртуальный терминал:

ttyvb   "/usr/libexec/getty Pc"	 xterm  off secure

Самым простым способом активировать виртуальные консоли является перезагрузка.

11.9.

Как осуществляется доступ к виртуальным консолям из X?

Используйте комбинацию клавиш Ctrl+Alt+Fn для переключения обратно в виртуальную консоль. Нажмите Ctrl+Alt+F1, чтобы вернуться на первую виртуальную консоль.

После того, как вы оказались в текстовой консоли, используйте комбинации Alt+Fn для переключения между ними.

Чтобы вернуться в сеанс работы X, переключитесь в виртуальную консоль, на которой запущена X Window. Если X был запущен из командной строки с использованием команды startx, то сеанс работы X будет привязан к следующей неиспользуемой виртуальной консоли, а не к той текстовой консоли, с которой он был запущен. В случае восьми активных виртуальных терминалов X будет работать на девятом, поэтому используйте комбинацию Alt+F9.

11.10.

Как запустить XDM во время загрузки?

Есть две философские школы, проповедующие различные методы запуска xdm(1). Последователи одного течения запускают xdm из /etc/ttys (посмотрите ttys(5)), используя приводимый пример, тогда как другие вставляют запуск xdm в скрипт rc.local (посмотрите справку по rc(8)) или X, помещая последний в каталог /usr/local/etc/rc.d. Оба метода равноправны, и один из них может работать в ситуациях, с которыми не справляется другой и наоборот. В обоих случаях результат один и тот же: X выводит графическое приглашение для входа в систему.

Плюсом метода с использованием ttys(5) является документирование того, на каком vty будет запущен X и то, что ответственность за перезапуск X-сервера при завершении сеанса работы лежит на процессе init(8). Метод с использованием rc(8) позволяет просто прекратить работу xdm командой kill xdm, если при запуске X возникли какие-нибудь проблемы.

Из rc(8) xdm должен быть запущен без аргументов. xdm должен быть запущен после запуска getty(8), иначе они будут конфликтовать, блокируя консоль. Лучше всего выдержать паузу секунд на 10 и потом запустить xdm.

Если xdm запускается из /etc/ttys, остаётся вероятность конфликта между xdm и getty(8). Одним из способов избежать этого является добавление номера vt в файл /usr/local/lib/X11/xdm/Xservers:

:0 local /usr/local/bin/X vt4

В вышеприведённом случае X-серверу указывается работать на /dev/ttyv3. Заметьте, что номера отличаются на единицу. Дело в том, что X-сервер считает vty от единицы, когда как отсчёт vty в ядре FreeBSD ведётся с нуля.

11.11.

При запуске xconsole выдаётся сообщение Couldn't open console.

Если X запускается с помощью startx, права на устройство /dev/console не изменяются, поэтому такие программы как xterm -C и xconsole не будут работать.

Это зависит от прав доступа, установленных для консоли по умолчанию. В многопользовательской системе вовсе не нужно, чтобы любой пользователь мог выводить информацию на системную консоль. Для пользователей, вошедших в систему через VTY, для решения этой проблемы существует файл fbtab(5).

В общем, раскомментируйте строчку в файле /etc/fbtab (посмотрите справку по fbtab(5)):

/dev/ttyv0 0600 /dev/console

Этого будет достаточно для того, чтобы всякий, кто вошёл в систему с терминала /dev/ttyv0, имел доступ к консоли.

11.12.

Моя мышь PS/2 в X работает неправильно.

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

psmintr: out of sync (xxxx != yyyy)

Если это случилось, отмените проверку согласования, установив значение флага для драйвера мыши PS/2 в 0x100. Проще всего это сделать добавлением hint.psm.0.flags="0x100" в /boot/loader.conf с перезагрузкой.

11.13.

Как поменять местами кнопки мыши?

Наберите xmodmap -e "pointer = 3 2 1". Добавьте эту команду в ~/.xinitrc или ~/.xsession для автоматического запуска.

11.14.

Как установить экранную заставку и где такие заставки можно найти?

Подробный ответ находится в разделе Загрузочные экранные заставки Руководства FreeBSD.

11.15.

Можно ли в X использовать клавишу Windows?

Да. Используйте xmodmap(1) для привязки функций к этим клавишам.

Если все клавиатуры Windows стандартны, то эти три клавиши имеют следующие клавиатурные коды:

  • 115 - клавиша Windows между клавишами Ctrl и Alt с левой стороны

  • 116 - клавиша Windows справа от AltGr

  • 117 - клавиша Menu, слева от клавиши Ctrl, находящейся справа

Чтобы заставить левую клавишу Windows набирать запятую, попробуйте выполнить такую команду:

# xmodmap -e "keycode 115 = comma"

Для того, чтобы переопределения клавиш Windows выполнялось автоматически каждый раз при запуске X, поместите команды xmodmap в ~/.xinitrc либо, что предпочтительней, создайте файл ~/.xmodmaprc и включите в него параметры xmodmap по одному на строку, затем добавьте в ~/.xinitrc такую строку:

xmodmap $HOME/.xmodmaprc

Например, чтобы переопределить эти 3 клавиши так, чтобы они выполняли функции клавиш F13, F14 и F15. Это позволит легко привязать их к полезным функциям в приложениях или менеджере окон.

Чтобы сделать это, поместите такие строки в файл ~/.xmodmaprc:

keycode 115 = F13
keycode 116 = F14
keycode 117 = F15

При использовании оконного менеджера x11-wm/fvwm2 клавиши можно переопределить так, чтобы F13 сворачивал в иконку (и восстанавливал предыдущий размер) то окно, на которое указывает курсор, F14 перемещал окно с курсором на передний план или, если оно уже впереди, возвращал обратно, а F15 вызывал главное меню Workplace, даже если курсор находится не на рабочем столе, что бывает полезно, когда не видно ни одного кусочка рабочего стола.

Следующие записи в ~/.fvwmrc позволяют достичь описанных выше функций:

Key F13	FTIWS	A	Iconify
Key F14	FTIWS	A	RaiseLower
Key F15	A	A	Menu Workplace Nop

11.16.

Как заставить работать аппаратное ускорение 3D-графики для OpenGL(R)?

Наличие 3D-ускорения зависит от версии сервера Xorg и типа графического адаптера. Для адаптера nVidia используйте двоичный драйвер для FreeBSD, установив один из нижеследующих портов:

Последние версии адаптеров nVidia поддерживаются портом x11/nvidia-driver.

Более старые драйверы доступны как x11/nvidia-driver-###.

nVidia предоставляет подробную информацию о том, какие адаптеры поддерживаются тем или иным драйвером, на своём сайте: http://www.nvidia.com/object/IO_32667.html.

Для адаптеров Matrox G200/G400 следует попробовать порт x11-servers/mga_hal.

Для ATI Rage 128 и Radeon посмотрите страницы Справочника ati(4), r128(4) и radeon(4).

Этот, и другие документы, могут быть скачаны с http://ftp.FreeBSD.org/pub/FreeBSD/doc/.

По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.

По вопросам, связанным с этой документацией, пишите в рассылку <doc@FreeBSD.org>.