22

Настройка мыши

(Только одна мышь (PS/2 или USB) и только один дисплей.)


Мышь называют mouse (множ. mice или mouses), или pointer, или pointing device.


Разъёмы PS/2 - отдельные для клавиатуры и для мыши, нужно подключать правильно; или один совмещённый. Для USB-мышей подойдёт любой порт USB с подходящим разъёмом.


Устройства распознаются и частично настраиваются совместно ядром и демоном устройств (в настоящее время - udev).


Подключение/обнаружение мыши регистрируется в журнале ядра (dmesg или journalctl, некоторые числа могут отличаться, вывод сокращён):


# PS/2-мышь.

# Мышь/клавиатура не подключена или не распознана.

i8042: PNP: No PS/2 controller found.

# Мышь распознана.

PNP: PS/2 Controller [PNP0303:PS2K,PNP0f03:PS2M] at 0x60,0x64 irq 1,12

serio: i8042 AUX port at 0x60,0x64 irq 12

mousedev: PS/2 mouse device common for all mice

input: ImExPS/2 Logitech Explorer Mouse as /devices/platform/i8042/serio1/input/input2

# USB-мышь.

usb 1-8: New USB device found, idVendor=046d, idProduct=c077

usb 1-8: New USB device strings: Mfr=1, Product=2, SerialNumber=0

usb 1-8: Product: USB Optical Mouse


И, если есть, в журнале X Window (здесь показана только USB-мышь, вывод сокращён):


$ grep -E '.*udev.*(M|m)ouse' /var/log/Xorg.0.log

(II) config/udev: Adding input device Logitech USB Optical Mouse (/dev/input/event14)

(II) config/udev: Adding input device Logitech USB Optical Mouse (/dev/input/mouse0)


Распознанная мышь видна в списке устройств ввода (input):


$ cat /proc/bus/input/devices | grep -A 4 -E '^N.*(M|m)ouse'

# PS/2-мышь.

N: Name="ImExPS/2 Logitech Explorer Mouse"

P: Phys=isa0060/serio1/input0

S: Sysfs=/devices/platform/i8042/serio1/input/input2

U: Uniq=

H: Handlers=mouse1 event2

# USB-мышь.

N: Name="Logitech USB Optical Mouse"

P: Phys=usb-0000:00:14.0-8/input0

S: Sysfs=/devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8:1.0/0003:046D:C077.0003/input/input14

U: Uniq=

H: Handlers=mouse0 event14


Если USB-мышь распознана ядром, то видна по команде lsusb (вывод сокращён):


$ lsusb

# Название может отличаться от указанного в ценнике.

# Например, эта мышь продаётся под маркой Logitech B100.

Bus 001 Device 004: ID 046d:c077 Logitech, Inc. M105 Optical Mouse


Если поступают события от мыши (хотя бы просто движения), в консоли появятся кракозябры:


$ sudo cat /dev/input/mouse0


Некоторые возможные причины проблем с работой мыши:

- неисправность самой мыши, порта системного блока;

- ошибочные файлы настроек модулей (modprobe), gpm, udev или X Window. Простейшее решение - попробовать удалить или временно переместить "лишние" (на ваш взгляд) файлы настроек;

- ошибки в ACPI. Стоит попробовать отключить ACPI в строке параметров ядра при загрузке:

# Полностью.

acpi=off

# Или частично.

pci=noacpi


(В поиске сведений и попытках отследить/реинициализировать устройство может пригодиться udevadm.)


Драйвер мыши отчасти входит в ядро (соединение по PS/2 или USB), отчасти - в консольный демон мыши или в графическую среду (протокол распознавания сигналов). Ядерный драйвер для PS/2-мыши - psmouse. Для работы USB-мыши от ядра требуется скомпилировать его с поддержкой USB HID (Human Interface Device): CONFIG_USB_?HCI_*=y; CONFIG_?HID_*=m (знаки ? и * - метасимволы оболочки). Примерный список загруженных модулей для USB HID (вывод сокращён):


$ lsmod | grep -E '(usb|hid)'

hid_generic 16384 0

usbhid 49152 0

hid 118784 3 i2c_hid,hid_generic,usbhid


Несколько мышей либо тачпад и мышь - без дополнительных настроек практически считаются одним устройством, то есть их события равносильны и указатель мыши один на всех. Общий файл-устройство - /dev/input/mice; отдельные - /dev/input/mouse0 и далее по номерам. Старые файлы: /dev/psaux - для PS/2-мыши; /dev/mouse - ссылка для совместимости.


Основные пользовательские программные параметры мыши:

- доступные кнопки и колёсики;

- соответствие физических и желаемых (логических) кнопок, то есть, например, при настройке мыши для левшей;

- "интервал двойного щелчка" (double click interval);

- "разрешение" - чувствительность сенсора перемещений, в dpi, это не столько скорость, сколько плавность движения указателя;

- собственно "скорость" перемещения указателя (speed или velocity), также упоминаемая как "чувствительность" (sensivity);

- "порог ускорения" (acceleration threshold) - ход, пройдённый на нормальной скорости, после чего включается перемещение указателя с увеличенной скоростью;

- коэффициент ускорения - множитель (acceleration numerator) или делитель (... denominator) относительно нормальной скорости;

- рисунки указателей.



В текстовом интерфейсе


Указатель мыши в текстовом интерфейсе выглядит как заполненный прямоугольник; возможно, скрыт, но появится при движении мыши.


В командной строке мышью можно выделять фрагмент текста левой кнопкой (как в большинстве GUI-редакторов), а потом щелчком средней кнопки (колёсика) добавлять копию выделенного в конец командного выражения. Правый щелчок добавляет выделение к уже имеющемуся.


Осторожно: если выделено и вставлено больше одной строки, оболочка может воспринять конец строки как сигнал к выполнению.


В псевдографическом интерфейсе с мышью обращаются так же, как и в GUI, но с учётом ограничений (активная точка размером с один текстовый символ). Например, в Midnight Commander щелчком мыши можно выделить пункт списка, активировать меню (как по клавише F9), нажать виджет-кнопку ("F1 Help", "F2 Menu" и остальные).


За предоставление мыши в текстовом интерфейсе отвечает демон gpm (General Purpose Mouse Interface). Демон может обработать три кнопки, которые с его точки зрения являются левой, средней (колёсико) и правой.


Если нет файлов для системы инициализации, то можно запустить демона вручную:


$ sudo gpm -m /dev/input/mice -t exps2


Опция -m указывает файл-устройство. Опция -t - тип (семейство моделей) мыши; аргумент exps2 должен подойти для обычной мыши с колёсиком. Если вместо exps2 набрать help, демон выведет список типов и завершится.


Демон требует прав администратора, запускается один раз и дальше работает для всех текстовых консолей. Завершить gpm можно повторным запуском с опцией -k либо обычным способом.


Некоторые аргументы (через пробел, как -m и -t выше):

-B - соответствие физических и желаемых кнопок (123 - по умолчанию, для правшей; 321 - для левшей);

-i - интервал двойного щелчка в миллисекундах (по умолчанию 250);

-r - скорость перемещения указателя в процентах (от 1 до 100, по умолчанию 10);

-d - порог ускорения (в символах, 2 и выше, по умолчанию 25);

-a - коэффициент ускорения (выше 1, по умолчанию 2).


Документация: страницы man и info для gpm.



В GUI (X Window/Xorg и чуть-чуть о Wayland)


В графических средах мышь обычно настраивают GUI-программами, например:

- Mouse (kcmshell5 mouse) из раздела Hardware/Input Devices в центре настроек System Settings (systemsettings5), среда KDE 5;

- Mouse & Touchpad (gnome-control-center mouse) для центра настроек Control Center, среда GNOME 3;

- Mouse and Touchpad (xfce4-mouse-settings) для центра настроек Settings (xfce4-settings-manager), среда XFCE 4.


Мышь считается набором пронумерованных кнопок (buttons):

1 - левая (left);

2 - средняя (middle, обычное колёсико (wheel), когда нажимается для щелчка);

3 - правая (right);

4 - обычно колёсико при прокрутке вверх;

5 - обычно колёсико при прокрутке вниз;

6 и прочие - дополнительные элементы на игровых мышах.


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


$ xev

# Появляется окно, события внутри которого выводятся.

# Нажата левая кнопка: "ButtonPress...button 1".

ButtonPress event, serial 37, synthetic NO, window 0x4800001,

root 0x2b8, subw 0x0, time 2002006, (91,81), root:(642,495),

state 0x0, button 1, same_screen YES

# Отпущена: "ButtonRelease...button 1".

ButtonRelease event, serial 37, synthetic NO, window 0x4800001,

root 0x2b8, subw 0x0, time 2002142, (91,81), root:(642,495),

state 0x100, button 1, same_screen YES

# Начато движение колёсиком вверх: "ButtonPress...button 4".

ButtonPress event, serial 37, synthetic NO, window 0x4800001,

root 0x2b8, subw 0x0, time 2006510, (91,81), root:(642,495),

state 0x0, button 4, same_screen YES

# Закончено: "ButtonRelease...button 4".

ButtonRelease event, serial 37, synthetic NO, window 0x4800001,

root 0x2b8, subw 0x0, time 2006510, (91,81), root:(642,495),

state 0x800, button 4, same_screen YES


Максимум кнопок для Xorg - 24 штуки; по умолчанию - 3. Обычно определяется автоматически. Или принудительно в файле настроек.


Файлы настройки Xorg - текстовые ".conf". Списки мест хранения есть в man-страницах xorg и xorg.conf. Наиболее частые:

- файл /etc/X11/xorg.conf;

- куча отдельных файлов ".conf" в /etc/X11/xorg.conf.d/;

- куча отдельных файлов ".conf" в /usr/share/X11/xorg.conf.d/.


Файлы нумеруют (если нужно, с ведущими нолями) в начале имени, чтобы указать очередь обработки, например: 80-custom-mouse-setup.conf.


Секция настройки мыши выглядит примерно так:


# Старое название секции мыши/тачпада - Pointer.

Section "InputDevice"


# Любое название в разумных пределах; можно с пробелами.

Identifier "Mouse0"


# Потом следует добавить строку в секцию "ServerLayout".

# CorePointer по смыслу - "главная мышь".

# InputDevice "Mouse0" "CorePointer"


# Старый собственный драйвер X Window - mouse,

# более новый - evdev, новейший - libinput.

Driver "evdev"


# Протокол распознавания сигналов, подобно типу для gpm.

# Для обычной мыши подойдёт ExplorerPS/2,

# даже если она для разъёма USB.

# Ещё варианты: ImPS/2, USB. Список - в документации X.

# Или Auto, то есть сервер X попробует угадать.

Option "Protocol" "ExplorerPS/2"


# Файл-устройство.

Option "Device" "/dev/input/mice"


# Максимум кнопок. Необязательно.

Option "Buttons" "5"


# Для движения манипулятора предполагаются три оси:

# X (вправо - влево);

# Y (от себя - к себе);

# Z (вверх - вниз).

# Mapping - примерно "переназначение" или "привязка".

# Ось Z для мыши - обычно прокрутка (scrolling) колёсиком.

# Здесь движение колёсиком вперёд привязано к движению

# по оси Z вниз; назад - вверх. Интерпретировать это

# как прокрутку - задача отдельных программ/библиотек.

# У вас могут быть другие номера кнопок, смотрите вывод xev.

Option "ZAxisMapping" "4 5"

# Предположительно, для мыши с двумя колёсиками:

# Option "ZAxisMapping" "4 5 6 7"


# Соответствие физических и желаемых кнопок.

# По умолчанию - "1 2 3 8 9 10" (пропущены ZAxisMapping).

# Для левши - "3 2 1 8 9 10".

Option "ButtonMapping" "1 2 3 8 9 10"


# Частота опроса сигналов мыши в секунду.

# Помогает настроить более плавную реакцию на движение руки.

# Не для всех моделей мышей.

# Option "SampleRate" "число"

# Для USB-мыши можно попробовать настроить модуль HID ядра.

# Число - периодичность опроса в миллисекундах.

# По умолчанию - 8, то есть с частотой 1000/8 = 125 Гц.

# usbhid mousepoll=число


# Разрешение в dpi. Не для всех моделей мышей.

# Option "Resolution" "число"


# "Чувствительность", множитель перемещений.

# Если выше единицы и мышь с высоким разрешением,

# то по некоторым пикселам попасть не удастся.

# Применяют как замедлитель (дробь меньше единицы)

# для мышей с высоким разрешением. По умолчанию "1.0".

# Option "Sensitivity" "число"


# Симуляция удержания кнопки нажатой.

# Нажать и отпустить дополнительную кнопку (обозначена Д)

# вместо удерживания основной (О):

# Option "DragLockButtons" "Д1 О1 Д2 О2"

# Или нажать общую дополнительную кнопку, потом основную:

# Option "DragLockButtons" "ОД1"

# В конце перетаскивания снова нажать дополнительную.


# Конец секции.

EndSection


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


# Запустить в текстовой консоли.

# Число после двоеточия - номер дисплея ($DISPLAY).

# Первый дисплей - ноль, уже занят.

$ sudo X :1 -configure


В домашнем каталоге появится файл xorg.conf.new, который следует переместить/переименовать в /etc/X11/xorg.conf. Дальше правьте его по усмотрению.


Документация:

man-страницы X, xorg.conf;

https://www.x.org/releases/current/doc/man/man4/mousedrv.4.x...

документация ядра input/input.txt, admin-guide/kernel-parameters.txt


Программа xinput показывает списки и свойства для распознанных работающей системой X Window устройств ввода; позволяет изменять многие свойства. (Вывод не показан.)


# Показать древовидный список.

# Устройства могут отобразиться несколько раз.

# Опции --list --long - максимум подробностей.

$ xinput --list --long


# Отобразить отдельное устройство - указать его номер

# (число после "id=", например, 12) или название в кавычках.

# Опции здесь можно вводить без дефисов.

$ xinput list 12


# Распознавание событий от устройства ввода, наподобие xev.

$ xinput test 12

# Или для более новой подсистемы ввода XInput2.

$ xinput test-xi2 12


# Показать разные доступные свойства.

$ xinput list-props "Logitech USB Optical Mouse"


# Показать параметры ускорения.

$ xinput get-feedbacks 12


# Основной способ настройки устройств - опция [--]set-prop.

# Свойство можно указывать как название в кавычках

# или как число без скобок.

# Делитель скорости мыши (если меньше единицы, то ускорит).

$ xinput set-prop 12 "Device Accel Constant Deceleration" .5

$ xinput set-prop 12 296 1.0


# Некоторые иные способы задания свойств.

# Соответствие физических и желаемых кнопок.

# Аналогично опции "ButtonMapping" в файле ".conf".

$ xinput set-button-map 12 1 2 3 8 9 10


# Установить параметры ускорения.

# Порядок операндов: номер, порог, множитель, делитель.

$ xinput set-ptr-feedback 12 4 2 1


# Игнорировать (disable), задействовать (enable) устройство.

$ xinput --disable 12

$ xinput --enable 12


# Уведомлять об изменении свойств из списка list-props.

# Отключить - как обычно, Ctrl C.

$ xinput watch-props 12


# Снимок состояния кнопок (нажато или нет) и координат.

$ xinput query-state 12


Программа xset может показывать и изменять некоторые свойства работающей подсистемы X Window.


# Показать параметры ускорения указателя.

# Подобно опции get-feedbacks для xinput.

$ xset q | grep -A 1 'Pointer Control'

Pointer Control:

acceleration: 2/1 threshold: 4


# Установить параметры ускорения.

# Подобно опции set-ptr-feedback для xinput.

# Но xset действует на все подключённые мыши/тачпады.

# Порядок операндов: множитель, делитель, порог.

$ xset m 2/1 4


Документация: man-страницы xinput, xset.


Также могут пригодиться программы easystroke, imwheel, xautomation, xbindkeys, xmodmap.

Тема указателей - набор изображений формата "X11 cursor" (расширение "*.xmc" обычно не используется) и некоторых текстовых настроек.


Изображения можно открыть в GIMP. Программа xcursorgen может преобразовывать файлы формата PNG в X11 cursor.


Готовые темы есть, например, здесь:

https://www.opendesktop.org/browse/cat/107

https://www.deviantart.com/customization/skins/linuxutil/x11...


Каталоги хранения: ~/.icons/, /usr/share/icons/, /usr/share/pixmaps/. Подкаталог - название темы; ещё более нижний подкаталог - cursors/. Например: /usr/share/icons/DMZ-White/cursors/ для темы "DMZ-White".


В подкаталоге с названием темы могут быть текстовые файлы index.theme и cursor.theme. Формат - аналогичный файлам "*.desktop", например:


# index.theme

[Icon Theme]

Name=DMZ (White)

Name[ru]=DMZ (Белое)

Comment=White accessible cursor theme

Example=left_ptr


# cursor.theme

[Icon Theme]

# "Наследуемая" тема означает, что недостающие изображения

# будут взяты из неё, если текущая тема неполна.

# В крайнем случае - изображение по умолчанию (default):

# ~/.icons/default/index.theme или

# /usr/share/icons/default/index.theme.

Inherits=DMZ-White


Каталоги хранения можно указать в переменной окружения XCURSOR_PATH. Содержимое - аналогично PATH.


Ещё файлы настроек: ~/.Xresources, /etc/X11/Xresources. Добавить строку, наподобие

Xcursor.theme: DMZ-White


Может потребоваться применить содержимое файла ~/.Xresources в обход графической среды. Тогда нужно добавить строку

xrdb ~/.Xresources

в файл-сценарий "~/.xinitrc" или "~/.xprofile" (аналогично файлу "~/.bashrc").


Диспетчер дисплея (display manager) может сам себе задать тему указателей.


Документация:

http://www.x.org/releases/current/doc/man/man3/Xcursor.3.xht...

https://wiki.archlinux.org/index.php/Cursor_themes

https://wiki.archlinux.org/index.php/x_resources


В графической подсистеме Wayland каждый композитный диспетчер (compositor: KWin, mutter, Weston) обращается с мышью по-своему, но в настоящее время - через библиотеку libinput. Программа xinput при обращении к libinput работает только для X Window; программа xset не влияет на устройства ввода даже в X Window, если задействована libinput. Поэтому настраивать мышь в Wayland придётся GUI-программами графической среды (или средствами навроде gsettings). Библиотека libinput сама предоставляет некоторые оптимальные низкоуровневые настройки. Есть наборы параметров движения указателя (acceleration profiles), здесь не рассказано.


Документация:

https://wayland.freedesktop.org/libinput/doc/latest/faq.html

https://wayland.freedesktop.org/libinput/doc/latest/what_is_...

https://www.mankier.com/4/libinput

https://wayland.freedesktop.org/docs/html/ch03.html

https://wayland.freedesktop.org/docs/html/ch04.html

GNU/Linux

1.2K поста15.6K подписчиков

Правила сообщества

Все дистрибутивы хороши.

Будьте людьми.

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества