первым шагом будет выяснение физических кнопок. Я опишу процесс ремаппинга обычной игровой мыши, в моем случае saitek RAT3, но общие шаги применимы к любой мыши.
xinput list
, чтобы узнать ID вашей мыши и ее названиеxinput query-state {id}
, чтобы узнать состояние всех кнопок. Используйте эту возможность для подсчета кнопок вашей мыши. Чтобы помочь этому процессу, запустите watch -n0 xinput query-state {id}
для продолжения запроса. добавьте файл под названием 50-mousename
в /usr/share/X11/xorg.conf.d/
и откройте его вашим любимым редактором. вставьте этот шаблон:
Раздел "InputClass"
Идентификатор "Mouse Remap"
MatchProduct "{имя мыши}"
MatchDevicePath "/dev/input/event*"
Опция "ZAxisMapping" "4 5"
Опция "ButtonMapping" "1 2 3 4 5 6 7 8 9 0 0 0 0 0"
Опция "Resolution" "3200" #вам, вероятно, придется изменить это!
важной строкой является эта: Опция "ButtonMapping" "1 2 3"...
помните список кнопок, который вы составили ранее? Эта опция решает, какие физические кнопки соответствуют каким кнопочным событиям.
"1 2 3"
будет означать, что "физическая кнопка 1" - это "событие кнопки 1", "физическая кнопка 2" - это "событие кнопки 2" и так далее. Если бы вы хотели, скажем, переключить колесо прокрутки и правую кнопку мыши, вы бы изменили это на "3 2 1". Если это не имеет смысла, посмотрите на эту таблицу:
| Физическая кнопка | Событие кнопки | нормальное действие |
|-----------------|--------------|---------------|
|Left | 1 | select |
|Средняя | 2 | вставить/зависит |
|Правая | 3 | контекстное меню |
|Прокрутка вверх | 4 | контекстное меню |
|Прокрутка вниз | 5 | контекстное меню |
|Custom | 6+ | зависит |
чтобы отключить кнопку, поставьте 0 на ее место, например, чтобы отключить среднюю кнопку мыши "1 0 3 4 5 6 7 8 9 ..."
Вам придется войти и выйти, чтобы это вступило в силу.
Поскольку мне показалось, что в моих словах мало смысла, позвольте мне показать вам процесс за меня.
username@hostname ~> xinput list
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Saitek Cyborg R.A.T.3 Mouse id=12 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Video Bus id=7 [slave keyboard (3)]
↳ Power Button id=8 [slave keyboard (3)]
↳ Sleep Button id=9 [slave keyboard (3)]
↳ USB Keyboard id=10 [slave keyboard (3)]
↳ USB Keyboard id=11 [slave keyboard (3)]
Итак, имя моего устройства - Saitek Cyborg R.A.T.3 Mouse
с ID 12
notafile@notapc ~> xinput query-state 12
2 classes :
ButtonClass
button[1]=up
button[2]=up
button[3]=up
button[4]=up
button[5]=up
button[6]=up
button[7]=up
button[8]=up
button[9]=up
button[10]=down
button[11]=up
button[12]=up
button[13]=up
button[14]=up
button[15]=up
button[16]=up
button[17]=up
button[18]=up
ValuatorClass Mode=Relative Proximity=In
valuator[0]=1351
valuator[1]=403
valuator[2]=-372
Итак, у моей мыши в общей сложности 18 кнопок. Вот маппинг, который я обнаружил:
| Number | Button |
|--------|-------------|
| 1 | Left |
| 2 | Middle |
| 3 | Right |
| 4 | scroll up |
| 5 | scroll down |
| 8 | upper thumb |
| 9 | lower thumb |
| 10 | mode red |
| 11 | mode blue |
| 12 | mode purple |
| 13 | DPI up |
| 14 | DPI down |
у этой мыши есть несколько кнопок с особым поведением. Кнопки 10-12 всегда нажаты и не отпускаются, пока кнопка режима не будет нажата снова. Это можно исправить с помощью опции "AutoRelease", которую я не буду сейчас рассматривать, если только это не является проблемой для вас.
Итак, наше отображение должно быть довольно простым. Кнопки 1-5 - это обычные кнопки, 8 и 9
наши пользовательские кнопки, а 6-7 и 10+ - кнопки, которые нам не нужны. В результате карта выглядит следующим образом: "1 2 3 4 5 0 0 0 8 9 0 0 0 0 0 0 0 0 0"
. Не забудьте добавить в конец 0, чтобы количество элементов совпадало с количеством кнопок, в данном случае 18.
Я закончил! Теперь осталось вставить это в файл конфигурации по адресу /usr/share/X11/xorg.conf.d/50-saitek-rat3
, выйти из системы и снова войти!
Вот мой окончательный конфиг:
Section "InputClass"
Identifier "Mouse Remap"
MatchProduct "Saitek Cyborg R.A.T.3 Mouse"
MatchDevicePath "/dev/input/event*"
Option "ZAxisMapping" "4 5"
Option "ButtonMapping" "1 2 3 4 5 0 0 0 8 9 0 0 0 0 0 0 0 0 0"
Option "Resolution" "3200"
EndSection
Отвечая на ваш вопрос, я не думаю, что Ubuntu официально поддерживает обновления до выпусков, отличных от последнего выпуска или последней LTS. может быть возможно выполнить обновление до определенного выпуска, изменив соответствующее кодовое имя в /etc/apt/sources.list
и запустив apt update && apt dist-upgrade
, но при этом не будут учитываться какие-либо действия по обновлению, выполняемые инструментом do-release-upgrade
. (если есть ).
Однако в вашем конкретном случае 17.04 не является LTS и уже не поддерживается . 16.04 по-прежнему поддерживается; если вы не хотите обновляться до 18.04, вам следует придерживаться 16.04.
Таким образом, очевидным другим ответом является создание загрузочного USB-накопителя версии, до которой вы хотите обновиться, и создание резервной копии вашего текущего домашнего каталога, восстановление его после завершения установки. Это не элегантно, но работает.