maddot.ruмобильная версия Linux → Мышь A4Tech G9-500F - драйвер для Ubuntu

Мышь A4Tech G9-500F - драйвер для Ubuntu

14 Июл 2014

Ну, может это не совсем драйвер, и модули ядра мы тут писать не будем. Но я расскажу простой и удобный, а главное - рабочий способ заставить работать дополнительную клавишу у данной мыши так, как она должна работать, а не нажимать каждый раз сочетание WIN+R и ввод текста: rwww.win2.cn/g9 или кцццюцшт2юст.п9.
 
  На днях сломалась, верой и правдой, служившая мне долгих 6 лет моя любимая мышь. Я, разумеется, расстроился и просидел эти пару дней в Терминале без гуи, ибо в современном гуи делать без мышки нечего. И вот, вчера я приобрел - показавшуюся мне достаточно удобной мышь - A4Tech G9-500F. Честно скажу - выбирал в магазине долго и главным критерием было удобство "лежания" мыши в руке. Но, как и на большинстве аксессурах сейчас, на тыльной стороне коробки было написано, что нормальная работа гарантируется только вместе с ОС Windows. "Какая жалость )" - усмехнулся я, и купил эту мышь :) Я был полностью уверен, что в моем любимом Xubuntu она поднимется без проблем - так и произошло.
 
  Но оказалось, что в Linux не работает дополнительная кнопка на мыши, которая по умолчанию подразумевает двойной клик. И не то, чтобы не работает, а еще хуже - посылает системе сигнал о нажатии WIN+R и вводит адрес сайта, где можно скачать на нее драйвер, разумеется, только для Windows. Покопавшись в интернете еще немного я нашел лишь советы удалить Линукс, или вернуть мышь в магазин. Но это не труЪ-way подумал я, ведь мышь мне понравилась и я не собирался отказываться от ее использования только потому, что компания-производитель не позаботилась выпустить драйвер для A4Tech G9-500F. Вместо этого я решил реализовать поддержку дополнительной клавиши сам, чего бы мне это не стоило )
 
  Начал я, разумеется с формирования взгляда на нажатие "не правильной" кнопки системой. Сначала, признаться, хотел просто повесить опрееленное действие на нажатие комбинации WIN(META)+R, но это проблемы не решило ибо адрес сайта, вбиваемый мышью продолжал докучать, вводясь во все формы ввода, да еще и вызывая определенные сбои в системе. Тогда я решил узнать, как видит мою мышь система, используя команду в терминале:
 


 

$ xinput --list 
Вывод:
? Virtual core pointer                    	id=2	[master pointer  (3)]
?   ? Virtual core XTEST pointer              	id=4	[slave  pointer  (2)]
?   ? A4TECH USB Device                       	id=9	[slave  pointer  (2)]
?   ? A4TECH USB Device 			id=8	[slave  pointer  (2)]
...

Да, именно так. Система почему-то видела мышь - как два экземпляра мыши, один - сама мышь, второй - злосчастная кнопка. Но оказалось мне только на руку. Следующим действием я просто отключил ввод этой кнопки. Опытным путем я выяснил, что id кнопки у меня - 8 (следующей же командой):
 

$ xinput --disable 8

(Включить - xinput --enable 8)
  Так стало гораздо комфортней и легче на душе. Но теперь при нажатии кнопки не происходило вообще ничего, что достаточно сильно расстраивало ибо, раз есть кнопка, то ей хочется пользоваться. И я пошел копаться в /dev/input/ :
 

$ ls /dev/input/
by-id    event0  event10  event2  event4  event6  event8  js0   mouse0
by-path  event1  event11  event3  event5  event7  event9  mice

Предполагается, что один из event'ов - это наше устройство - чудо-кнопка. Для более комфортного поиска я установил удобную утилиту - evtest:
 

sudo apt-get install evtest

Запускать ее нужно от Рута:
 

$ sudo evtest        
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0:	Power Button
/dev/input/event1:	Power Button
/dev/input/event2:	AT Translated Set 2 keyboard
/dev/input/event3:	A4TECH USB Device
/dev/input/event4:	A4TECH USB Device
...
Select the device event number [0-11]:         

И так я узнал (ну, правда оставалось опять же опытным путем выяснить, какой ивент - 3 или 4), какой ивент мне необходимо слушать для отлова нажатия на клавишу, а слушать я буду с помощью той же утилиты - evtests:
 

sudo evtest /dev/input/event3

Итак, после нажатия, как я увидел - в событие появлется самым первым - нажатие на Win(meta)-key:
 

Event: time 1405347461.943455, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e3
Event: time 1405347461.943455, type 1 (EV_KEY), code 125 (KEY_LEFTMETA), value 1

Вот по данному событию я и буду отлавливать нажатие на клавишу, ведь, хоть в xinput я и отключил ее, но в события нажатия все-равно идут.
 
  Для того, чтобы заставить чудо-кнопку на G9-500F в Linux так, как заумывал разработчик мыши (двойной клик ЛКМ), который не удосужился написать для моей любимой ос драйвер - я написал следующий элементарный скрипт:
 
 

#!/bin/bash

evtest /dev/input/event3 | awk '/KEY_LEFTMETA\), value 1/ {system("xdotool click --repeat 2 1")}'


  Скрипт необходимо запускать от Рута. Желаю тебе удачи, если у тебя A4Tech G9-500F и Linux - не отчаивайся, как видишь - все оказывается не так сложно, если попытаться решить проблему, а не относить годный девайс в магазин - ты же не ламер какой в конце концов. Да прибудет с тобой сила! :)
 


 
  Как получать event кнопки автоматически
 
  В ходе работы с данным скриптом выяснилось, что номер event'а нашей кнопки в /dev/input может изменяться и тогда необходимо переписывать в скрипте его номер, чтобы evtest отслеживал именно кнопку, а не что-то другое.
 
  Чтобы автоматизировать процесс необходимо немного изменить исходный скрипт.
 
  Для начала через xinput --list как и описано выше получаем id устройства (у меня это 8), затем вписываем этот id в следующий, немного измененный скрипт из статьи:
 
 

#!/bin/bash

tEvent=$(xinput --list-props 8 | grep -oE "event+[0-9]{1,3}")
evtest /dev/input/$tEvent | awk '/KEY_LEFTMETA\), value 1/ {system("xdotool click --repeat 2 1")}'

В скрипте там, где "--list-props 8" - 8 (восьмерка) это какраз ID устройства, полученный опытным путем (как в статье) с помощью xinput.
  После указания своего id скрипт будет всегда сам получать event кнопки и подставлять его в evtest.
 


 
  Полностью автоматизированный скрипт
 
  Точно подходит для мышки g9-500f.
 
  Благодарим нашего читателя - MAP4yK за достойный вклад в развитие данного скрипта.
 
 

#!/bin/bash

sleep 5
for Id in $(xinput --list | grep  "A4TECH USB" | grep -oE "id=[0-9]{1,2}" | grep -oE "[0-9]{1,2}")
do
if [ "$(xinput --list-props $Id | grep -oE "\"Rel Horiz Wheel\"")" ]
then
buttonId=$Id
fi
done
sleep 5
xinput --disable $buttonId
sleep 5
tEvent=$(xinput --list-props $buttonId | grep -oE "event+[0-9]{1,3}")
evtest /dev/input/$tEvent | awk '/KEY_LEFTMETA), value 1/ {system("xdotool click --repeat 2 1")}'


ρ8578
Рубрика → Linux
Метки: A4Tech G9-500F драйвер linux ubuntu

Дополнение:
Меня спрашивали, как добавить получившийся скрипт в автозапуск?
Я сделал так:

sudo nano /etc/sudoers 

В конец файла /etc/sudoers дописал:

ALL ALL=NOPASSWD: /home/mike/bin/mouse.sh

/home/mike/bin/mouse.sh - это полный путь к скрипту.

Потом просто добавил в стандартном меню настроек->сеансы и запуск->автозапуск команду: sudo /home/mike/bin/mouse.sh

Скриншот меню автозапуска с xUbuntu:


Не забудь, что если скрипт стартует с системой - в него также необходимо добавить вызов xinput --disable id (чтобы каждый раз не прописывать это вручную). Вот так выглядит скрипт у меня сейчас (для примера):

#!/bin/bash

sleep 5
for Id in $(xinput --list | grep  "A4TECH USB" | grep -oE "id=[0-9]{1,2}" | grep -oE "[0-9]{1,2}")
do
if [ "$(xinput --list-props $Id | grep -oE "\"Rel Horiz Wheel\"")" ]
then
buttonId=$Id
fi
done
sleep 5
xinput --disable $buttonId
sleep 5
tEvent=$(xinput --list-props $buttonId | grep -oE "event+[0-9]{1,3}")
evtest /dev/input/$tEvent | awk '/KEY_LEFTMETA), value 1/ {system("xdotool click --repeat 2 1")}'

Кстати, если даешь скрипту право на исполнение от ROOT без пароля - проследи, чтобы у него не было права на запись (на всякий случай).

Rub4ek 28 Июл 2014 23:31:02

Спасибо.
Только добавил обратный слэш перед скобкой, иначе ругался awk:
awk: line 1: regular expression compile failed (missing '(')
KEY_LEFTMETA), value 1


Вот:

#!/bin/bash

evtest /dev/input/event5 | awk '/KEY_LEFTMETA\), value 1/ {system("xdotool click --repeat 2 1")}'


Ну и не был установлен xdotool, для его установки (на всякий случай, мануал же ;) ):
sudo apt-get install xdotool

[Ответ]
Mike 30 Июл 2014 18:07:02

Rub4ek, спасибо за комментарий, мне казалось что xdotool был у меня по умолчанию, хотя у меня xubuntu, может так и было, я к сожалению уже и не помню :)

[Ответ]
MAP4yK 20 Окт 2014 18:55:32

ещё бы автоматизировать поиск этого устройства при повторном включении/выключении машины, а то оно на разные девайсы садиться, то на 11 то на 5

[Ответ]
Mike 21 Окт 2014 15:58:49

MAP4yK, спасибо за комментарий - автоматизация это всегда здорово.

У меня получилось автоматически получить номер ивента кнопки, я дополнил этим способом статью (в конце):
Перейти к способу автоматизации

Себе так-же сделал ибо тоже иногда менялся номер ивента и было необходимо менять цифру в скрипте - теперь все само ловится.

[Ответ]
Глеб 23 Ноя 2014 16:47:18

Добрый день, у меня почти такая же проблема, только проблема с правой кнопкой
как нужно переделать скрипт?

Event: time 1416750395.907856, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70029
Event: time 1416750395.907856, type 1 (EV_KEY), code 1 (KEY_ESC), value 0

[Ответ]
MAP4yK 30 Ноя 2014 16:44:42

Mike,
спс! еще бы понять какое именно из двух устройств по xinput --list надо ставить
в качестве значения для переменной buttonId. Я отключаю их по очереди, но если отключить лишнее то мышь вообще отключится :) Есть идеи как из двух значений отобрать одно нужное? :)

[Ответ]
MAP4yK 30 Ноя 2014 16:58:27

Вот так мне удалось получить id этих двух устройств, но как найти среди них двоих нужное?
xinput --list | grep  "A4TECH USB" | grep -oE "[0-9][0-9]"

[Ответ]
Mike 02 Дек 2014 16:54:48

Глеб, я думаю, что тебе лучше покопать в сторонну "ремаппинга" - http://wiki.birth-online.de/know-how/software/linux/remapping-mousebuttons

MAP4yK, Я приходил к такому же (с grep), но вот пока еще тоже не знаю, как получить нужный (с виду они же одинаковые кроме id). Может еще у кого-то есть идеи как это сделать, отписывайтесь :)

[Ответ]
MAP4yK 13 Дек 2014 11:38:22

Mike,
не силён я в bash, но методом проб и ошибок наклепал следущее:

#!/bin/bash

for Id in $(xinput --list | grep  "A4TECH USB" | grep -oE "[0-9][0-9]")
do
if [ "$(xinput --list-props $Id | grep -oE "\"Rel Horiz Wheel\"")" ]
then
buttonId=$Id
fi
done

на выходе в buttonId будет искомый номер, т.к. строчка "Rel Horiz Wheel"
только у него вроде как. Может если таковых устройств будет больше надо усилить этот условие, но для данной мыши этого хватает

спс.

[Ответ]
Mike 16 Дек 2014 10:12:47

MAP4yK, получилось круто! :) Немного подправил для универсальности (id у меня например менее 10) и вот в итоге готовый и полностью автоматизированный скрипт для нашей мышки ))

#!/bin/bash

sleep 5
for Id in $(xinput --list | grep  "A4TECH USB" | grep -oE "id=[0-9]{1,2}" | grep -oE "[0-9]{1,2}")
do
if [ "$(xinput --list-props $Id | grep -oE "\"Rel Horiz Wheel\"")" ]
then
buttonId=$Id
fi
done
sleep 5
xinput --disable $buttonId
sleep 5
tEvent=$(xinput --list-props $buttonId | grep -oE "event+[0-9]{1,3}")
evtest /dev/input/$tEvent | awk '/KEY_LEFTMETA), value 1/ {system("xdotool click --repeat 2 1")}'

(Без sleep у меня автозапуск не работает)

#Добавил в основную статью^

[Ответ]
MAP4yK 24 Дек 2014 16:23:05

Mike,
Нашёл проект еле живой. Он как раз про мыши и клавиатуры от A4TeX, там есть демон для проверки уровня зарядки и сорцы утилиты которая позволяет кое что ещё настраивать в G9-500F, вот только у меня она с параметром init вырубала доп. кнопку намертво, заслав в устройство какой то 16-ричный код. Но зарядку батареи выдавала исправно. https://github.com/Marisa-Chan/init-gmouse -- вот его адрес. Довольно интересно.

[Ответ]
Mike 28 Дек 2014 17:55:58

MAP4yK, спасибо за ссылку, посмотрел, интересный проект. Правда пока не ставил посмотреть (ну тут как всегда я придерживаюсь правила - работает не трожь) :) А то сейчас пока нет особо времени ковыряться ))

[Ответ]
Aex 15 Янв 2015 15:05:40

А есть ли способ прописать этот двойной клик в мышу? Дабы он работал везде из коробки, без плясок с бубном.

[Ответ]
Mike 15 Янв 2015 21:16:33

Aex, верояно, что сейчас такого способа нет, может и можно ее перепрограммировать, но для этого нужны соответствующие инструменты или реверс-инжиниринг, по ссылке что дал MAP4yK программа умеет снимать дамп памяти мышки, может это чем-то поможет.

MAP4yK, нашел-таки время побаловаться с этой программой и... наступил на те-же грабли, заслав с помощью init hex-код :) последствия, я думаю, объяснять не стоит - кнопка намертво отрубилась ))))))

Если еще актуально - я смог это исправить:

Исправляем последствия команды a4tool init для G9-500F

Надеюсь, что эта инфа окажется еще актуальной, ну или кому-либо еще пригодится.

[Ответ]
Вова 21 Янв 2015 16:59:00

СПАСИБО.У меня мышь 4tech G10-730F Тот же прикол)))Все заработало.

[Ответ]
Alex 25 Янв 2015 10:08:14

Тоже купил мышку G9-500F, именно из-за кнопки двойного клика. Но на Ubuntu она не работала. К счастью, нашел в поисковике эту статью и решил настроить.
Хочу добавить, что получилось не сразу, и вот почему:
1. Лучше сразу перейти в админ-мод: sudo -s -H, введя пароль админа.
2. Заранее установить "evtest": sudo apt-get install evtest и "xdotool". Причем последний устанавливать пришлось не через терминал, а скачав deb файл.
3. В конечном скрипте есть опечатка:
вместо: awk '/KEY_LEFTMETA)
нужно: awk '/KEY_LEFTMETA\)
4. Для автозапуска скрипта на Ubuntu нужно прописать права на него в файл sudoers, причем путь лучше скопировать из утилиты автозапуска, которую быстрее найти через поиск Ubuntu (кнопка с логотипом Ubuntu на боуовой панели).

[Ответ]
Alex 25 Янв 2015 10:11:16

*боковой
Ну и конечно, добавить в утилите автозапуска этот скрипт :)

[Ответ]
Айдар 04 Фев 2016 10:48:13

Ребята, у меня комплект A4Tech 9300F: беспроводная клавиатура GR-152 и мышь G9-730FX. Указанный способ работает, но xinput --disable помимо даблклика отключает полностью и клавиатуру. Может кто сталкивался?

[Ответ]


B s i

 




Рубрики
» Компьютеры
» Операционные системы
» Android
» Linux
» Windows
» Разное


блог   linux   пк   удобство   android   ubuntu   ubutnu   google   софт   компьютер   взлом   вконтакте   эстетика   xubuntu   сервер   php  


» Все статьи  (Списком)

Популярное
» Все заметки (Списком)



Друзья
Хостинг Макхост
Качественный платный хостинг. Широкий спектр качественных хостинг услуг с 2004 года



Яндекс.Метрика
Ваш IP: 54.226.172.30
Вы на узле: 178.208.83.19
URL: m.maddot.ru
Время сервера: 2017-12-18T12:00:03+03:00