- Вопрос или проблема
- Решение для пользователей Wayland и X11
- Обновление: Борьба с ошибками GTK!
- Требования
- Сначала создайте папку .middle-paste/ в $HOME и добавьте два файла:
- Во-вторых, настройте переключатель
- Ответ или решение
- 1. Отключение функции вставки через xbindkeys
- 2. Изменение маппинга кнопок мыши
- 3. Использование gnome-tweaks для пользователей GNOME
- 4. Скрипт для Wayland
- Заключение
Вопрос или проблема
Мне не нравится, что при нажатии средней кнопки мыши происходит вставка, потому что в итоге я часто получаю некорректный код в Eclipse. Как я могу отключить это (во всех программах)? Я использую Fedora.
Это решение будет работать глобально и сохранять функциональность средней кнопки мыши под Xorg.
-
Установите
xbindkeys xsel xdotool
-
Добавьте это в
~/.xbindkeysrc
"echo -n | xsel -n -i; pkill xbindkeys; xdotool click 2; xbindkeys" b:2 + Release
-
Перезагрузите
xbindkeys -p
Запустите xbindkeys
при старте системы, pkill xbindkeys
для остановки.
Мыши с колесом прокрутки поддерживают событие нажатия средней кнопки, когда вы нажимаете на колесико. Это отличная функция, но она может быть раздражающей. К счастью, её можно отключить.
Сначала вам нужно узнать ID вашей мыши, вот так:
$ xinput list | grep 'id='
что выводит что-то вроде
⎡ Виртуальный основной указатель id=2 [основной указатель (3)]
⎜ Виртуальный основной указатель XTEST id=4 [ведомый указатель (2)]
⎜ Оптическая мышь PixArt Dell MS116 USB id=12 [ведомый указатель (2)]
⎣ Виртуальная основная клавиатура id=3 [основная клавиатура (2)]
Виртуальная основная клавиатура XTEST id=5 [ведомая клавиатура (3)]
Кнопка питания id=6 [ведомая клавиатура (3)]
Видео Bus id=7 [ведомая клавиатура (3)]
Кнопка питания id=8 [ведомая клавиатура (3)]
Кнопка сна id=9 [ведомая клавиатура (3)]
Проводная клавиатура Dell KB216 id=10 [ведомая клавиатура (3)]
Проводная клавиатура Dell KB216 id=11 [ведомая клавиатура (3)]
Горячие клавиши WMI Eee PC id=13 [ведомая клавиатура (3)]
Моя USB мышь Dell имеет ID=12.
Таким образом, я могу посмотреть на отображение кнопок моей мыши так:
$ xinput get-button-map 12
что выводит
1 2 3 4 5 6 7 8 9 10 11 12
Здесь только первые три числа имеют значение для меня. Они представляют левую, среднюю и правую кнопки мыши.
Я могу отключить среднюю кнопку мыши, установив её в 0:
$ xinput set-button-map 12 1 0 3
Или я могу превратить среднюю кнопку мыши в левую, установив её в 1:
$ xinput set-button-map 12 1 1 3
Это работает для меня (kubuntu 18.04 LTS)
В Fedora 24 вы можете установить gnome-tweak-tool
с помощью следующей команды:
$ sudo dnf install gnome-tweak-tool
Откройте gnome-tweak-tool
и перейдите на вкладку “Клавиатура и мышь”, отключите “Вставка при среднем щелчке”.
Решение для пользователей Wayland и X11
Этот скрипт отключит вставку средней кнопки мыши, он поддерживает как Wayland, так и X11, и вы всё равно сможете использовать среднюю кнопку мыши нормально:
#!/bin/sh
# Скрипт для отключения вставки средней кнопкой мыши; Зависимости: xsel, wl-clipboard
if [ "$XDG_SESSION_TYPE" == "wayland" ]; then
wl-paste -p --watch wl-copy -p < /dev/null # Обычно работает.
#wl-paste -p --watch wl-copy -cp # 100% эффективно, может вызвать проблемы с выделением текста в GTK приложениях.
fi
while [ "$XDG_SESSION_TYPE" == "x11" ]; do
xsel -fin < /dev/null # 100% эффективно, может вызвать проблемы с выделением текста в GTK приложениях.
done
Старый ответ (способ для X11, который не должен вызывать проблем с выделением текста в GTK): https://unix.stackexchange.com/revisions/472464/6
Обновление: Борьба с ошибками GTK!
Я заметил, что некоторые приложения в Wayland очистят основной буфер обмена, только если вы используете маршрут wl-copy -cp
(обращаясь к вам! chromium!), но это нарушает выбор текста в GTK приложениях. Теперь идеальное решение заключалось бы в том, чтобы разработчики GTK исправили свои проблемы, но ждать этого никто не хочет, так что я придумал обходной путь (он не идеален, но работает) для этой проблемы, к сожалению, однако в Wayland это является и может быть только решением, специфичным для композитора, что означает, что я не могу дать всем идеальное решение, но, к счастью, концепция чрезвычайно проста, и это всего лишь 4 строки кода, поэтому любой сможет понять, как модифицировать это для своей машины.
Вот обходной путь для Hyprland:
-
Сначала мы отключим основной буфер обмена для проблемных GTK приложений:
gsettings set org.gnome.desktop.interface gtk-enable-primary-paste false
-
Получите этот скрипт:
#!/bin/bash applist="thunar gedit kitty" # Если текущее окно не в списке приложений, очистить основной буфер обмена if ! hyprctl -j activewindow | jq .class | grep -Ei "$(echo $applist | sed 's: :\|:g')" >/dev/null; then wl-copy -cp fi
-
Отредактируйте под свой композитор. Если вы не используете Hyprland, замените этот фрагмент:
hyprctl -j activewindow | jq .class
тем, который выведет класс вашего текущего активного окна. -
Добавьте любые приложения, которые имеют проблемы с выделением, в список приложений в скрипте:
applist="gedit thunar mousepad gparted pcmanfm и так далее"
Эти приложения должны хорошо соответствовать идентификатору, который вы используете для нахождения этих окон в скрипте (в этом случае значение, отображаемое для 'class' через
hyprctl activewindow
) -
Запустите скрипт:
wl-paste -p --watch /path/to/the/script
Теоретически то же самое можно сделать в X11 с использованием xprops
вместо hyprctl activewindow
, и заменить wl-copy -cp
на xsel -cp
, но я ещё не тестировал это, я, вероятно, обновлю этот ответ позже, когда это сделаю.
Иметь вставку средней кнопкой является стандартом интерфейса Unix, как иметь левую кнопку для выбора или активации, и правую кнопку для выполнения чего-то другого (например, для расширения, переключения, открытия меню и т.д.). Вы найдете это привязано к вставке во многих приложениях Unix.
Если ваша проблема заключается в том, что ваша мышь слишком чувствительна, когда вы кладете палец на колесико, я предлагаю приобрести лучшую мышь. Существует множество дешевых достойных мышей.
Вы можете переназначить кнопку 2 мыши на другое число. Приложения идентифицируют левую, среднюю и правую кнопки мыши как кнопки 1, 2 и 3 соответственно. Вставьте этот код в скрипт, который выполняется при запуске вашей сессии X (как это сделать зависит от вашего окружения рабочего стола).
echo 'pointer = 1 6 3 4 5' | xmodmap -
ИЗМЕНЕНИЕ: Я только что обнаружил проблему с решением, которое я опубликовал: в некоторых программах (gitk
, по крайней мере, не уверен, насколько это распространено) это будет предотвращать выбор текста. Попробуйте это, но если у вас возникнут проблемы с выделением текста в программе, которую вы часто используете, то следует отказаться от этого решения.
Установите xsel
, а затем выполните следующий скрипт:
#!/bin/sh
while true; do
xsel -fin < /dev/null
done
Пока этот скрипт работает (вы можете установить его запуск при входе в систему), средняя кнопка мыши не будет вставлять в любое приложение. Так что технически она всё равно будет вставлять, но всегда не будет ничего для вставки.
Как это работает: он запускает xsel
и копирует (-i
) содержимое /dev/null
, не переходя в фоновый режим (-n
), и действительно удерживает эту пустую строку в буфере вместо того, чтобы просто очищать её и выходить (-f
). Каждый раз, когда он выходит, он снова запускает xsel
с теми же параметрами. Поскольку xsel
будет продолжать работу до тех пор, пока другая программа не «освободит его от обязанностей», копируя что-то другое, он не будет постоянно создавать новые процессы, а вместо этого поддерживает один процесс, работающий ровно до тех пор, пока он не понадобится снова. (Если только у вас не запущено несколько экземпляров скрипта, но нет причин для этого.)
Также нет, это не будет мешать обычному копированию/вставке, потому что вставка при среднем щелчке использует отдельный буфер обмена.
Расширяя ответ @flarn2006, я создал демон-выключатель и простой стёртель:
Требования
xsel
, notify-send
, и менеджер сочетаний клавиш (в моем случае это xfce4-keyboard-setting
)
Сначала создайте папку .middle-paste/
в $HOME
и добавьте два файла:
#!/bin/sh
# toggler.sh
# Установите файл блокировки и пути к программам
PROGRAM_PATH="$HOME/.middle-paste/"
LOCKER_FILE="$PROGRAM_PATH/lock"
# Проверьте, есть ли файл блокировки
if [ -f "$LOCKER_FILE" ]; then
# Если существует, прочитайте PID демона, который содержится в файле
daemon_pid=$(cat $LOCKER_FILE)
# Убейте демона
kill "$daemon_pid"
# И удалите блокировку
rm $LOCKER_FILE
notify-send --urgency=critical --expire-time=500 \
'Вставка средней кнопкой мыши отключена' \
'В некоторых приложениях могут возникнуть проблемы с работой средней кнопки мыши.'
else
# Если файла не существует, создайте его
edit > $LOCKER_FILE
# Затем запустите демон для отключения вставки средней кнопкой
sh $PROGRAM_PATH/daemon.sh &
# Небольшая пауза
sleep 0.1s
# Получите PID демона, чтобы отобразить его в уведомлении
daemon_pid=$(cat $LOCKER_FILE)
notify-send --urgency=critical --expire-time=500 \
"Вставка средней кнопкой мыши включена ("$daemon_pid")" \
'В некоторых приложениях могут возникнуть проблемы с выделением текста.'
fi
#!/bin/sh
# daemon.sh
# Установите файл блокировки и пути к программам
PROGRAM_PATH="$HOME/.middle-paste/"
LOCKER_FILE="$PROGRAM_PATH/lock"
# Допишите PID этого процесса в файл блокировки
echo $$ > $LOCKER_FILE
# Запустите демон
while true; do
xsel -fin < /dev/null
done
Во-вторых, настройте переключатель
Это может быть запуск, кнопка в вашей панели или даже сочетание клавиш, вам только нужно
- Добавьте
sh $HOME/.middle-paste/toggler.sh
к сочетанию клавишSUPR + X
, чтобы быстро переключать демон. Не забудьте заменить переменную$HOME
на ваш реальный домашний путь, иначе Менеджер сочетаний клавиш может не найти скрипт (например,/home/user/.middle-paste/toggler.sh
) - Добавьте
xsel -c
к сочетанию клавишSUPR + V
, чтобы быстро очистить буфер обмена средней кнопки мыши без необходимости в демоне. Это полезно, когда вы знаете, что не собираетесь выходить из приложения, в котором вы ничего не скопируете, но собираетесь использовать среднюю кнопку мыши (например, вFigma
илиInkscape
, где эта проблема возникает только когда что-то уже есть в буфере обмена).
Это общепринятая конвенция, которой придерживаются многие программы. Нет глобального способа отключить это, вам необходимо делать это для каждой программы отдельно.
ИЗМЕНЕНИЕ: (кроме, как говорит Жиллес, отключения кнопки мыши 2. Но некоторые программы действительно используют кнопку мыши 2 по другим назначениям, так что я бы не рекомендовал это.)
При использовании менеджера рабочего стола KDE может потребоваться дополнительный шаг для решения проблемы.
Судя по всему, Klipper, менеджер буфера обмена, предоставленный KDE, нарушает работу скриптов, которые исправляют поведение, очищая выбор буфера обмена.
Следуя шагам, описанным в ответе Radivarig, вы получите глобальное отключение вставки при среднем щелчке, сохраняя всю функциональность средней кнопки и ctrl+c/v.
Следуйте шагам, описанным ниже:
Установите
xbindkeys xsel xdotool
Добавьте это в
~/.xbindkeysrc
"echo -n | xsel -n -i; pkill xbindkeys; xdotool click 2; xbindkeys" b:2 + Release
Перезагрузите
xbindkeys -p
На шаге 2. вам может потребоваться удалить часть + Release
, как описано в в этом посте, в зависимости от того, что работает на вашем компьютере.
Затем откройте Klipper, например, через иконку буфера обмена в системном трее > правый клик > Настроить буфер обмена. Снимите галочку "Предотвращать пустой буфер обмена". Перезагрузите, и проблема должна быть решена.
Идея последнего пункта принадлежит milaq's XMousePasteBlock.
Я программирую уже десятилетиями, но в основном на машинах с Windows. Только недавно я начал изучать мир программирования под Linux и столкнулся с этой проблемой — мой последний проект был заполнен случайным текстом, потому что средняя кнопка на используемой мной мыши была довольно чувствительной — я совершенно растерялся, пока не решил погуглить эту проблему и не попал сюда.
Я никогда намеренно не использовал среднюю кнопку для нажатия на что-либо, возможно, потому что она ничего не делает в Windows по умолчанию. Я только когда-либо использовал среднее колесо прокрутки для прокрутки. Прочитав несколько различных решений в интернете и в этой теме, я решил выбрать более простое решение.
Вот оно:
- Вытащите мышь из USB-порта.
- Возьмите отвертку Phillips #1 и пару бокорезов.
- Посмотрите под мышью и найдите винт, чтобы открыть нижнюю крышку.
- Снимите винт и снимите крышку.
- Найдите небольшой микрик, который находится под пружинным рычагом колеса прокрутки.
- Используйте бокорезы, чтобы раздавить этот переключатель и откусить от него внутренности. Постарайтесь не повредить оптическое колесо и датчики. Наслаждайтесь чувством мести за то, что вам пришлось просматривать весь свой код в поисках случайных кусочков текста.
- Очистите обломки и соберите мышь обратно.
- Подключите мышь обратно в USB-порт.
- Посмотрите, как работает колесо прокрутки. Попробуйте нажать на среднюю кнопку мыши — о, смотрите, ничего не происходит!
Aaaahhhhh! Вот так намного лучше!
p.s. Вы можете использовать эту возможность, чтобы очистить всю грязь, которая накапливается внутри вашей мыши — ваша мышь будет работать гораздо лучше теперь!
Если вы используете менеджер рабочего стола KDE, например KDE Plasma 5.18, вы можете открыть Настроить Рабочий стол
в контекстном меню правой кнопкой мыши на рабочем столе. Затем проверьте Действия мыши
, чтобы настроить/удалить действие для Средней кнопки
.
Вы также можете обратиться к этому учебнику для получения дополнительной информации: Подробное руководство по настройке рабочего стола KDE Plasma.
PS: Я долгое время недоумевал по поводу стандартного действия вставки средней кнопки. Немного странно, что такая конфигурация не может быть найдена в Системных настройках
. И это было открыто случайно. Надеюсь, это поможет вам, если вы используете KDE.
Я нашел еще одно решение, используя sxhkd
.
Он отключает обычный средний щелчок (без удерживания модификатора) для всех приложений XWayland, таких как Chromium, Konsole, Discord. (Возможно, даже для всех приложений при использовании Xorg.)
Это исправление не влияет на настоящие приложения Wayland, такие как Terminal и Firefox (с включенным Wayland). Для них по-прежнему необходимо использовать что-то вроде gnome-tweaks и about-config.
Это решение также решает проблему случайного открытия вкладок со случайными ссылками при использовании клавиатуры Thinkpad TrackPoint II для прокрутки веб-страницы. Моя буквально делает средний щелчок каждый раз, когда я прокручиваю.
Кроме того, с помощью трюка echo -n | xsel -n -i
положение курсора всё еще меняется при вставке пустого буфера обмена. Это может быть очень неприятно, когда вы просто хотите продолжить печатать с того места, где остановились после прокрутки.
Еще одним преимуществом этого исправления является то, что функциональность вставки средней кнопкой всё еще работает! Вам просто нужно удерживать одну из модификаторных клавиш при среднем щелчке.
Установите sxhkd
:
sudo apt install sxhkd
Создайте конфигурацию sxhkd
в ~/.config/sxhkd/sxhkdrc
(или добавьте, если такая уже существует), чтобы захватить средний щелчок, не пересылая его в приложение:
mkdir ~/.config/sxhkd
# захват простого среднего щелчка с помощью бездействующей операции ':'
cat << EOF >> ~/.config/sxhkd/sxhkdrc
button2
:
EOF
Запустите sxhkd
:
sxhkd
Чтобы автоматически запустить sxhkd
при старте системы, вы можете добавить его через 'Программы автозагрузки' или использовать следующую команду:
# запускать sxhkd при старте (это то же самое, что делать это вручную через 'Программы автозагрузки')
cat << EOF > ~/.config/autostart/sxhkd.desktop
[Desktop Entry]
Type=Application
Exec=sxhkd
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name=sxhkd
Comment=захватывать обычный средний щелчок в не-Gnome приложениях
EOF
Если вы часто прокручиваете горизонально, удерживая shift, вы также можете добавить эти строки в свою конфигурацию. Тогда средние щелчки мыши при удерживании shift также будут захватываться.
shift + button2
:
ИЗМЕНЕНИЕ: После некоторого времени использования этого решения я обнаружил еще одну действительно полезную функцию. Средний щелчок на неактивном окне XWayland теперь просто фокусирует его, не щелкая! Так что вы не теряете выделенный текст или положение курсора, и вам не нужно осторожно щелкать по всем активным областям. В Gnome это имеет такой же эффект, как Super-Click или Alt-Tab.
Для тех, кто использует Linux Mint с Cinnamon, gnome-tweaks
больше не работает вообще; я не уверен, почему он все еще в репозиториях. Вместо этого вы можете использовать приложение "Мышь и сенсорная панель" и отключить опцию "Вставить текущий выбор при нажатии средней кнопки".
Ответ или решение
Чтобы отключить функцию "вставки при нажатии средней кнопки мыши" во всех программах на Fedora, воспользуйтесь следующими шагами. Это решение будет работать глобально и сохранить функциональность средней кнопки при использовании Xorg и Wayland.
1. Отключение функции вставки через xbindkeys
-
Установите необходимые пакеты:
Выполните следующую команду в терминале:sudo dnf install xbindkeys xsel xdotool
-
Настройте
~/.xbindkeysrc
:
Откройте или создайте файл~/.xbindkeysrc
и добавьте в него следующее:"echo -n | xsel -n -i; pkill xbindkeys; xdotool click 2; xbindkeys" b:2 + Release
Эта команда очищает буфер обмена при отпускании средней кнопки.
-
Перезагрузите
xbindkeys
:
Выполните команду:xbindkeys -p
Теперь функция вставки по средней кнопке отключена.
2. Изменение маппинга кнопок мыши
Если вам нужно отключить среднюю кнопку мыши полностью:
-
Узнайте ID вашей мыши:
Выполните команду:xinput list
-
Получите маппинг кнопок вашей мыши:
Замените12
на ID вашей мыши, полученный из предыдущего шага:xinput get-button-map 12
-
Установите новый маппинг:
Чтобы отключить среднюю кнопку, выполните:xinput set-button-map 12 1 0 3
Это заменит среднюю кнопку на кнопку "0", тем самым отключив её действие.
3. Использование gnome-tweaks
для пользователей GNOME
Если вы используете рабочий стол GNOME, вы можете воспользоваться инструментом gnome-tweaks
:
-
Установите
gnome-tweaks
:
Выполните команду:sudo dnf install gnome-tweaks
-
Откройте
gnome-tweaks
и перейдите на вкладку "Клавиатура и мышь". Найдите опцию "Middle-click-Paste" и отключите её.
4. Скрипт для Wayland
Если вы работаете с Wayland, можете использовать следующий скрипт для отключения вставки при нажатии средней кнопки:
#!/bin/sh
# Скрипт для отключения вставки средней кнопкой мыши; требуется xsel и wl-clipboard
if [ "$XDG_SESSION_TYPE" == "wayland" ]; then
wl-paste -p --watch wl-copy -p < /dev/null
fi
while [ "$XDG_SESSION_TYPE" == "x11" ]; do
xsel -fin < /dev/null
done
Сохраните этот скрипт и запустите его при старте системы.
Заключение
Следуя вышеописанным шагам, вы отключите функциональность вставки при нажатии средней кнопки мыши во всех программах на Fedora. Если у вас есть дополнительные вопросы или трудности, не стесняйтесь задать их.