Вход/Регистрация
Внутреннее устройство Linux
вернуться

Уорд Брайан

Шрифт:

примечание

Есть специальное окно, которое называется корневым окном, — это фон дисплея. Однако, возможно, вы его никогда не видели (см. пункт «Фон рабочего стола» подраздела 14.3.2).

14.3.1. X-события

X-клиенты получают данные ввода и другую информацию о состоянии сервера через систему событий. X-события устроены подобно любому другому асинхронному межпроцессному взаимодействию, такому как события менеджера udev и шины D-Bus: X-сервер получает информацию от источника (например, устройства ввода), а затем предоставляет эти данные как событие для любого заинтересованного X-клиента.

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

$ xev

—snip—

MotionNotify event, serial 36, synthetic NO, window 0x6800001,

root 0xbb, subw 0x0, time 43937883, (47,174), root:(1692,486),

state 0x0, is_hint 0, same_screen YES

MotionNotify event, serial 36, synthetic NO, window 0x6800001,

root 0xbb, subw 0x0, time 43937891, (43,177), root:(1688,489),

state 0x0, is_hint 0, same_screen YES

Обратите внимание на координаты в скобках. Первая пара представляет координаты x и y для указателя мыши внутри окна, а вторая (root:) определяет положение указателя на всем дисплее.

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

LeaveNotify event, serial 36, synthetic NO, window 0x6800001,

root 0xbb, subw 0x0, time 44348653, (55,185), root:(1679,420),

mode NotifyNormal, detail NotifyNonlinear, same_screen YES,

focus YES, state 0

FocusOut event, serial 36, synthetic NO, window 0x6800001,

mode NotifyNormal, detail NotifyNonlinear

Одним распространенным способом применения команды xev является извлечение кодов клавиш и символов для различных клавиатур, когда выполняется настройка раскладки клавиатуры. Вот результат нажатия клавиши L; код клавиши при этом равен 46:

KeyPress event, serial 32, synthetic NO, window 0x4c00001,

root 0xbb, subw 0x0, time 2084270084, (131,120), root:(197,172),

state 0x0, keycode 46 (keysym 0x6c, l), same_screen YES,

XLookupString gives 1 bytes: (6c) "l"

XmbLookupString gives 1 bytes: (6c) "l"

XFilterEvent returns: False

Можно также прикрепить команду xev к существующему идентификатору окна с помощью параметра -id id (используйте для параметра id тот идентификатор, который получен с помощью команды xwininfo) или отслеживать корневое окно с помощью параметра -root.

14.3.2. Понятие о X-вводе и настройка предпочтений

Одной из потенциально вводящих в тупик характеристик X-системы является то, что зачастую есть несколько способов настройки предпочтений, и некоторые из них могут не работать. Например, одним из распространенных клавиатурных предпочтений в Linux является переназначение клавиши Caps Lock на клавишу Control. Это можно выполнить несколькими способами, начиная с небольших регулировок с помощью старой команды xmodmap и заканчивая созданием совершенно новой раскладки клавиатуры с помощью утилиты setxkbmap. Как понять, какой из них следует (и следует ли) применить? Все упирается в знание того, какие части системы отвечают за это, но выяснить бывает сложно. Помните о том, что окружение рабочего стола может обладать собственными настройками и переопределениями.

С учетом сказанного опишу некоторые моменты, относящиеся к основной инфраструктуре.

Устройства ввода (в целом)

X-сервер использует расширение X Input Extension, чтобы управлять вводом от различных устройств. Есть два основных типа устройств ввода — клавиатура и указатель (мышь), — и можно подключить столько устройств, сколько пожелаете. Чтобы одновременно использовать несколько устройств одного типа, расширение X Input Extension создает «виртуальное устройство ядра», которое направляет ввод от устройства на X-сервер. Устройство ядра называется ведущим; а физические устройства, подключаемые к компьютеру, — подчиненными.

  • Читать дальше
  • 1
  • ...
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: