Сценарий для замены основной и дополнительной кнопок мыши

Попробуйте dpkg --install /var/cache/apt/archives/postfix_2.11.3-1_amd64.deb и после apt -f install

2
13.04.2017, 15:22
5 ответов

Без предоставления вывода xinput list в вашей системе, никто не может предложить ответ, который вы могли бы использовать напрямую. Это связано с тем, что xinput может отображать устройства, отличные от показанных в . Как мне поменять местами кнопки мыши на терминале, чтобы они были левшами? .

Например, вот вывод для OSX:

$ xinput list
⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ xquartz virtual pointer                   id=6    [slave  pointer  (2)]
⎜   ↳ pen                                       id=8    [slave  pointer  (2)]
⎜   ↳ cursor                                    id=9    [slave  pointer  (2)]
⎜   ↳ eraser                                    id=10   [slave  pointer  (2)]
⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ xquartz virtual keyboard                  id=7    [slave  keyboard (3)]

, а вот вывод для моего Debian / testing:

$ xinput list
⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ VMware VMware Virtual USB Mouse           id=7    [slave  pointer  (2)]
⎜   ↳ VirtualPS/2 VMware VMMouse                id=9    [slave  pointer  (2)]
⎜   ↳ VirtualPS/2 VMware VMMouse                id=10   [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)]
    ↳ AT Translated Set 2 keyboard              id=8    [slave  keyboard (3)]

, так что в одной системе можно выбрать один идентификатор (виртуальный указатель xquartz), а в другой есть три возможности. Если вы прочитаете их, вы обнаружите, что приведенные здесь примеры не являются надуманными:

Учитывая вариацию (и расплывчатую документацию для xinput ), вы, вероятно, не сможете автоматизировать часть получения идентификатора устройства мыши.

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

xinput get-button-map 12

в массив. Некоторые языки сценариев предоставляют массивы, например bash . Но есть несколько подводных камней:

  • в моей системе OSX, которая возвращает список «1 2 3», а в системе Debian, которая возвращает список «1 2 3 4 5 6 7 8 9 10 11 12».
  • вы должны угадать, значат ли что-то дополнительные кнопки, а
  • даже назначение трех номеров кнопок может быть не очевидным для левого / среднего / правого.

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

  • инициализировать файл с текущими кнопками
  • обновлять его в соответствии с вашей схемой переключения кнопок (с 3 возможны «3!» Возможных расположения)

Предположим, у вас есть простейший конфигурации (и интерпретации) вы можете сделать что-то вроде этого в сценарии:

#!/bin/sh
id=$1
cfg=$HOME/.mousebuttons
[ -f "$cfg" ] || xinput get-button-map $id | awk ' { printf "normal: %s\n", $0; }' >$cfg
mode=$(awk '{print $1;}' <$cfg)
# read and toggle
list=$(awk '{printf "%d %d %d\n", $3, $2, $4; }' <$cfg)
if [ "x$mode" = "xnormal" ]
then
    mode=reverse
else
    mode=normal
fi
# update the configuration
echo "$mode $list" | awk '{ printf "%s %d %d %d\n", $1, $2, $3, $4; }' >$cfg
xinput set-button-map $id $list
# show result
xinput get-button-map $id

Сценарий принимает один параметр (идентификатор устройства мыши). Для данного примера (и назвав скрипт «toggle-buttons», сделав его исполняемым и поместив в ваш $ PATH ):

toggle-buttons 12

должен выполнить свою работу.

2
27.01.2020, 21:59

Вы можете поместить командную строку в файл:

#!/bin/bash
# swap two mouse buttons for better ergonomics, e.g. BACK, FORWARD    
xinput set-button-map 12 3 2 1 

Как только вы это сделаете, сделайте это исполняемый файл (если файл называется swap_buttons.sh ):

chmod +x swap_buttons.sh

Теперь вы можете запустить сценарий с помощью:

./swap_buttons.sh
1
27.01.2020, 21:59

Я бы сделал что-то вроде:

#!/bin/sh

mxid=$(xinput --list --short | awk '/Razer/{gsub(/.*id=/, "");gsub(/[[:blank:]].*/, "");print}')
bmap=$(xinput get-button-map $mxid)
nmap=$(awk '{s=$1;$1=$3;$3=s};1' <<<$bmap)
xinput set-button-map $mxid $nmap

Предполагается, что вы знаете «имя» своей мыши (в моем случае это Razer ), и вы знаете отображение кнопок по умолчанию (т.е. какие кнопки расположены слева и справа, чтобы их можно было поменять местами), которое вы получаете с помощью xinput list $ mxid :

Button labels: "Button Left" "Button Middle" "Button Right"....

и xinput get-button -map $ mxid :

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Как видите, в моем случае 1 = >> left и 3 = >> right , поэтому приведенный выше сценарий просто считывает текущий сопоставление и меняет местами первое и третье значения, а затем устанавливает новое сопоставление.

1
27.01.2020, 21:59

Если вам нужно переключить состояние (и ваш обратный / обратный порядок клавиш мыши является таким состоянием), устройства вы должны иметь возможность запрашивать у устройства текущее состояние или сохранять состояние в какой-то файл.

Поскольку я не смог найти, есть ли у xinput способ запрашивать у мыши отображение кнопок, вам, вероятно, следует сохранить состояние в файле, например ~ / .config / mousebuttons . Ваш скрипт должен записывать "в обратном направлении" в файл при выполнении:

xinput set-button-map 12 3 2 1 и записывать "normal" в этот файл при выполнении:

xinput set-button -map 12 2 3 Фактическое действие, которое необходимо предпринять, зависит от чтения файла: выполните первый шаг, если содержимое файла при запуске сценария нормальное (или файл не существует) , и сделайте второе, если содержимое обратное .

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

0
27.01.2020, 21:59

Я добавлю свое собственное решение к этому, поскольку другие ответы иногда кажутся слишком сложными для простой задачи замены основных кнопок (1 и 3) мыши.

#!/bin/bash                                                                                           
set -e

# To get the name of a devices, do "xinput list --name-only"                                          
DEVICE_NAME="PixArt Microsoft USB Optical Mouse"

current_button_map=$(xinput get-button-map "$DEVICE_NAME")

if [[ $current_button_map =~ "1 2 3" ]]; then
    echo "Making the mouse a lefty"
    xinput set-button-map "$DEVICE_NAME" 3 2 1
else
    echo "Making the mouse a righty"
    xinput set-button-map "$DEVICE_NAME" 1 2 3
fi
2
27.01.2020, 21:59

Теги

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