Автоматически отключать ускорение мыши, когда мышь подключена

У меня есть ноутбук, и я часто использую с ним мышь Logitech G5. Я не люблю ускорение при использовании мыши. Поэтому мне приходится отключать ускорение каждый раз, когда я подключаю мышь. Есть ли способ автоматически отключать ускорение мыши, когда я подключаю мышь?

2
задан 26 December 2013 в 03:44

2 ответа

1119 Да, это может быть сделано, и это относительно легко сделать. Вам нужно создать 3 файла - правило udev и два сценария.

Правило UDEV

Правило UDEV обнаруживает событие подключения мыши и запускает сценарий всякий раз, когда происходит событие. Создайте файл в разделе /etc/udev/rules.d:

sudo gedit /etc/udev/rules.d/42-kill-mouse-accel.rules

Вставьте в него следующую строку:

ACTION=="add", ATTRS{bInterfaceClass}=="03", ENV{DISPLAY}=":0.0", ENV{XAUTHORITY}="/home/[YOUR_USER_NAME]/.Xauthority", ENV{ID_CLASS}="mouse", RUN+="/usr/local/bin/kill-mouse-accel.sh"

Обратите внимание на часть с надписью [YOUR_USER_NAME], вы должны заменить ее с вашим именем пользователя.
Сохраните и выйдите из Gedit.

Скрипт ускорения

Скрипт ускорения - это код, запускаемый правилом UDEV, который, в свою очередь, разветвляет рабочий скрипт в фоновом режиме. Фоновый скрипт будет выполнять реальную работу. Мы делаем это, так как хотим немного подождать, прежде чем менять ускорение, но не хотим блокировать UDEV. Создайте файл в /usr/local/bin:

sudo gedit /usr/local/bin/kill-mouse-accel.sh 

Вставьте в него следующий код:

#!/bin/bash 

export DISPLAY=${DISPLAY} 
/usr/local/bin/kill-mouse-accel-worker.sh &

Сохраните и выйдите из Gedit.

Сценарий фонового ускорения

В этом сценарии вызывается команда, отключающая ускорение мыши. Создайте файл в /usr/local/bin:

sudo gedit /usr/local/bin/kill-mouse-accel-worker.sh

Вставьте в него следующий код:

#!/bin/bash 

sleep 2 

for i in $(xinput list | grep [Mm]ouse | sed -e 's/^.*id=\([0-9]*.\).*$/\1/') 
do 
    echo "Found device: $i" 

    # The command disabling mouse acceleration
    xinput set-ptr-feedback $i 10 1 1 
done

Сохраните и выйдите из Gedit.

Завершение и тестирование

Сделайте оба сценария исполняемыми:

sudo chmod +x /usr/local/bin/kill-mouse-accel.sh /usr/local/bin/kill-mouse-accel-worker.sh

Перезапустите UDEV:

sudo service udev restart

Наконец, снова подключите USB-мышь и подождите, пока несколько секунд. Ускорение мыши должно быть отключено.

Кредиты

Авторы получают следующие записи в блоге: http://granjow.net/udev-rules.html

0
ответ дан 26 December 2013 в 03:44
  • 1
    +1, но у Вас есть опечатка в первой команде, !, оператор должен быть прежде -perm -u+x – kos 16 June 2015 в 23:01

У меня похожая проблема, и я разработал другое решение.

Я написал Python-скрипт, который прослушивает события udev и запускает некоторые команды, когда устройство подключено или отключено. В моем случае одна из команд отключает ускорение мыши . Я выбрал это решение, потому что оно не требует прав root и, следовательно, может применяться в любой системе Linux. Я просто оставляю скрипт Python запущенным в фоновом режиме и больше не беспокоюсь об этом.

Все сценарии доступны по адресу https://bitbucket.org/denilsonsa/small_scripts/src/default/ , и они также скопированы / отражены ниже, для справки.

<час>

auto_configure_upon_usb_device_change.py

#!/usr/bin/env python3

import functools
import os.path
import pyudev
import subprocess
import time

def main():
    BASE_PATH = os.path.dirname(os.path.realpath(os.path.abspath(__file__)))
    path = functools.partial(os.path.join, BASE_PATH)
    call = lambda x, *args: subprocess.call([path(x)] + list(args))

    context = pyudev.Context()
    monitor = pyudev.Monitor.from_netlink(context)
    monitor.filter_by(subsystem='usb')
    monitor.start()

    call('xinput_disable_mouse_acceleration.sh')

    for device in iter(monitor.poll, None):
        # Wait a short amount of time to let the device get ready.
        time.sleep(0.250)

        call('xinput_disable_mouse_acceleration.sh')

if __name__ == '__main__':
    main()

xinput_disable_mouse_acceleration.sh

#!/bin/sh

xsp_microsoft() {
    xinput set-prop 'Microsoft  Microsoft Basic Optical Mouse v2.0 ' "$@"
}
xsp_logitech() {
    xinput set-prop 'Logitech USB Laser Mouse' "$@"
}

xsp_microsoft 'Device Accel Profile' -1
xsp_logitech 'Device Accel Profile' -1

xsp_microsoft 'Device Accel Constant Deceleration' 1.5
0
ответ дан 26 December 2013 в 03:44

Другие вопросы по тегам:

Похожие вопросы: