Сделайте мышь левой и тачпад правой рукой

10

Я вижу, что могу настроить мышь и тачпад на одной панели (Ubuntu 13.10, по умолчанию, Gnome). Что в некоторой степени. А именно, я хочу, чтобы тачпад был настроен иначе, чем мышь и ...

Когда у меня подключена (USB) мышь, я обычно использую ее левой рукой. Поэтому я переключаю кнопки на левшей. Но когда я использую тачпад, я чувствую себя немного потерянным с такой конфигурацией. Поэтому я хочу, чтобы это было правым.

Есть ли способ добиться следующего: когда я подключаю мышь (соответственно, когда она обнаружена), автоматически переключаюсь на леворуку, а когда я отключаю ее, автоматически переключаюсь на правша?

Лео
источник

Ответы:

10

Я понимаю ваше разочарование, но эта проблема может быть решена очень просто с помощью xinputинструмента.

Сначала подключите USB-мышь, а затем выполните следующую команду:

xinput list

чтобы увидеть idвашу мышь. Вывод вышеуказанной команды может быть похож на:

Xinput | Кот
Id ID указателя виртуального ядра = 2 [главный указатель (3)]
Pointer ↳ Указатель XTEST виртуального ядра id = 4 [ведомый указатель (2)]
PS ↳ SynPS / 2 Synaptics TouchPad id = 14 [ведомый указатель (2)]
Mouse ↳ USB Mouse id = 11 [ведомый указатель (2)]
Id ID виртуальной клавиатуры = 3 [мастер клавиатура (2)]
    ...

В приведенном выше примере USB-мышь имеет id=11. Мы будем использовать это idв следующей команде, которая поменяет кнопки, предназначенные для левой руки, только для USB-мыши (а не для тачпада):

xinput set-button-map 11 3 2 1

В общем:

xinput set-button-map id 3 2 1

Чтобы отменить изменение, используйте:

xinput set-button-map id 1 2 3

Чтобы внести изменения навсегда, добавьте следующую команду в Startup Applications (поиск в Dash для Startup Applications ):

sh -c "xinput set-button-map id 3 2 1"

Обновить:

Поскольку идентификатор может измениться после перезагрузки, а имя USB-мыши - нет, вы также можете использовать имя мыши и применить его. Чтобы пропустить детали рег. выбрав имя, окончательное решение выглядит так:

для идентификатора в `/ usr / bin / xinput list | / bin / grep ' USB Mouse ' | / bin / grep -o [0-9] [0-9] `; do xinput set-button-map $ id 3 2 1; сделанный;

упакуйте его в вышеупомянутые приложения автозагрузки, которые вы получите наконец:

sh -c "для идентификатора в` / usr / bin / xinput list | / bin / grep ' USB Mouse ' | / bin / grep -o [0-9] [0-9] `; сделать xinput set-button-map $ id 3 2 1; готово; "
Раду Рэдяну
источник
2
Я не знаю, должен ли я редактировать ваш пост или нет. Ваш подход дал мне правильное направление, но проблема заключалась в том, что перезапуск может изменить идентификатор мыши. Поэтому я изменил это на sh -c "for id in '/usr/bin/xinput list | /bin/grep 'Razer' | /bin/grep -o [0-9][0-9]'; do xinput set-button-map $id 3 2 1; done;"и это работает (возможно, нужно заботиться о правильных дефисах). Спасибо за подсказку.
Лев
@LeO В моем случае перезагрузка, не меняет идентификатор мыши. Я не тестировал больше мышей и не менял положение порта USB.
Раду Радеану
@LeO В любом случае, ваша идея очень хорошая, так что, пожалуйста, отредактируйте ответ. Если нет, я сделаю это позже.
Раду Рэдяну
8

Есть даже более простой способ, чем в ответе Раду Рэдяну . xinputпринимает имя устройства ввода в качестве альтернативы его числовому идентификатору. Поскольку ваша USB-мышь, вероятно, обрабатывается в общем, ее имя, скорее всего, является USB Mouse. Поэтому вам, вероятно, даже не нужно бежать xinput list.

Таким образом, ваш xinput set-button-map, с этим именем вместо числового идентификатора, становится:

xinput set-button-map "USB Mouse" 3 2 1

Это займет место и должно достичь того же самого, сделав его левой рукой, точно так же, как при использовании числового идентификатора . (И замена на все равно будет работать, чтобы переключиться на правую мышь.)xinput set-button-map id 3 2 13 2 13 2 11 2 3

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

reedstrm
источник
1
Этот ответ заслуживает большего количества голосов.
Мефисто
В моем случае у меня есть беспроводная мышь + клавиатура, поэтому xinput listотображаются 2 записи с одинаковым именем («2.4G Wireless Keyboard & Mouse»), за исключением одной «[slave pointer (2)]», а другая «« подчиненная клавиатура (3). )]». Так что в вашем решении у меня есть эта ошибка «Есть несколько устройств с именем« 2.4G Wireless Keyboard & Mouse ».». На данный момент я использую добавление решения Radu grep 'slave pointer'. Интересно, позволяет ли xinput как-то указывать, что мы ссылаемся на указатель, не делая всего этого?
matiascelasco
1

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

В загрузочных приложениях

bash -c "for id in `/usr/bin/xinput list | /bin/grep 'USB Mouse' | /bin/grep -o id=[0-9][0-9]*`; do xinput set-button-map ${id:3} 3 2 1; done;"
Робби
источник
0
device_id=$(/usr/bin/xinput list \
            | /bin/grep 'slave  pointer' \
            | /bin/grep 'Wireless Keyboard&Mouse' \
            | tr " " "\n" \
            | /bin/grep "id=" \
            | /bin/grep -o [0-9][0-9]* \
        )
/usr/bin/xinput set-button-map $device_id 3 2 1 

Вот более подробное решение, которое решает две проблемы:

  • Он работает для идентификаторов устройств с любым количеством цифр (аналогично решению @robbie, но написано немного по-другому)
  • Считает, что имя устройства может быть продублировано. В моем случае у меня есть беспроводная мышь + клавиатура, поэтому xinput listотображаются 2 записи с одинаковым именем («2.4G Wireless Keyboard & Mouse»), за исключением одной «[slave pointer (2)]», а другая «« подчиненная клавиатура (3). )]». Так, с решением @reedstrm у меня была эта ошибка: «Существует несколько устройств с именем« 2.4G Wireless Keyboard & Mouse ».», В то время как с решением @Radu Rădeanu, он перебрал for2 идентификатора, один для мыши и один для клавиатуры, имея Сообщение об ошибке «Устройство не имеет кнопок» со вторым.
matiascelasco
источник