(Только одна мышь (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