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

(Только одна мышь (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.1K постов15.5K подписчиков

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

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

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

5
Автор поста оценил этот комментарий
P. S. Кто забыл про день рождения дедушки Столлмана, тому не под силу дочитать этот пост до конца. Верно, @Snipers ? ;-)
показать ответы