- Вопрос или проблема
- Firefox
- Chrome/Chromium/Edge/Brave
- Приложения на Electron
- Другие приложения
- С libinput
- Для функциональности автопрокрутки в Firefox
- Вторая альтернатива
- Ответ или решение
- Теория
- Пример
- Настройка в браузерах
- Firefox
- Chrome/Chromium
- Настройка на системном уровне
- Применение
- Сценарии автоматизации
- Заключение
Вопрос или проблема
В Windows большинство программ с крупными, прокручиваемыми текстовыми контейнерами (например, все браузеры, большинство текстовых редакторов и IDE) позволяют нажимать среднюю кнопку мыши и затем двигать мышь для прокрутки. Эта прокрутка плавная и позволяет быстро прокручивать, используя только мышь.
Когда я использовал Linux на ноутбуках, прокрутка двумя пальцами выполняет примерно ту же функцию; легко быстро прокручивать страницу вниз (намного быстрее, чем при прокрутке колесиком мыши), но при этом прокрутка остается достаточно плавной для точного позиционирования.
Я не уверен, как достичь того же эффекта, работая в Linux на настольном компьютере с мышью. Насколько я могу судить, после большого количества поисков, ни в приложениях, ни в системных настройках нет возможности переключить поведение средней кнопки мыши на Windows-стиль или достичь того же эффекта.
Чтобы сделать это конкретным, давайте скажем – если это имеет значение – что я спрашиваю в контексте Firefox, Google Chrome, Gedit и Eclipse на последней версии Mint (что я использую дома) или Ubuntu (что я использую на работе). Хотя я подозреваю, что это достаточно дистрибутив-независимый и приложение-независимый вопрос.
Насколько я могу судить, мои варианты для прокрутки:
- Прокрутка колесиком мыши – медленно!
- Использовать клавиши PgUp / PgDn – прыгает на огромное расстояние за один раз, так что не может использоваться для точного позиционирования, и менее удобно, чем использование мыши
- Перетаскивание полосы прокрутки справа экрана вверх и вниз, как я делал на старых Windows ПК с двухкнопочными мышками. Это то, что я делаю на практике, но это просто-напросто менее удобно, чем Windows-стиль прокрутки средней кнопкой; на огромном широкоформатном экране у меня уходит почти секунда, чтобы переместить курсор из середины экрана до полосы прокрутки, и почти секунда, чтобы вернуть его назад, и мне приходится отвлекаться от содержимого, которое я фактически прокручиваю, чтобы сделать это.
Ничто из этого меня не устраивает! Этот вопрос пользовательского интерфейса – единственное, что отравляет мое удовольствие от Linux на настольных компьютерах и почти заставляет желать, чтобы у меня был трекпад вместо мыши. Это раздражает меня настолько, что я пришел к выводу, что либо я упускаю какую-то базовую функцию пользовательского интерфейса Linux, которая решает эту проблему, либо я просто сверхчувствительный человек, и это никого другого не беспокоит – но я не уверен, что именно.
Итак, мои вопросы:
- Существует ли прокрутка средней кнопкой мыши в стиле Windows где-нибудь в мире Linux, или это действительно чисто Windows-функция? В частности, позволяют ли какие-либо веб-браузеры в Linux использовать прокрутку в стиле Windows?
- Есть ли какие-либо механизмы для прокрутки страниц, которые существуют в Linux, но не в Windows, особенно те, которые выполняют описанную мной роль?
- Какие-нибудь другие решения, которые я упускаю?
Функция, о которой вы говорите, называется “Автопрокрутка”. Она позволяет нажать и удерживать среднюю кнопку мыши и перемещать мышь для плавной прокрутки. В Linux по умолчанию для этого действия (нажатие средней кнопкой мыши) часто используется вставка текста.
Однако в Firefox есть настройка, а для Chrome/Chromium доступно расширение, которые позволят вам использовать среднюю кнопку мыши для прокрутки и активировать эту функцию.
Firefox
- Откройте вкладку “Опции”: “≡” (Открыть меню) → “Настройки”.
- Перейдите в “Общие” (по умолчанию должна открыться вкладка “Общие”).
- Прокрутите вниз до раздела “Просмотр”.
В разделе “Просмотр” найдите опцию “Использовать автопрокрутку”. Установите галочку рядом с этой опцией, чтобы активировать эту функцию в Firefox.
Или просто введите “автопрокрутка” в панели поиска.
Chrome/Chromium/Edge/Brave
Для Chrome/Chromium/Edge/Brave можно использовать расширение, называемое “AutoScroll” (от kaescripts.blogspot.com).
-
Перейдите по этой ссылке на Chrome Web Store (очевидно, используя Chrome/Chromium/Edge/Brave).
1.Нажмите на кнопку с надписью “+ ДОБАВИТЬ В CHROME”, чтобы установить это расширение. -
Нажмите “Добавить” в Диалоговом окне подтверждения.
Приложения на Electron
В некоторых приложениях на Electron, таких как Visual Studio Code, Spotify, Discord, вы можете добавить --enable-blink-features=MiddleClickAutoscroll
к аргументам запуска. В зависимости от того, поддерживает ли программа эту функцию в версии Electron, автопрокрутка будет включена.
Другие приложения
Что касается других приложений, я пока не нашел решения для них. В любом случае, проблемы в основном создаются высокими веб-страницами, для которых у обоих, Firefox и Chrome/Chromium, есть решение.
Это будет работать со всеми вашими приложениями без необходимости установки чего-либо.
Получите ваше устройство ID. В моем случае это было 11.
xinput list
Если хотите, просмотрите доступные свойства с помощью xinput list-props <deviceID>
. Если вы используете libinput (будущее/настоящее), почти все свойства будут начинаться с libinput. Для evdev
смотрите мой ответ здесь.
С libinput
Настройте свойства мыши
xinput set-prop 11 "libinput Scroll Method Enabled" 0, 0, 1 # Это кнопка
xinput set-prop 11 "libinput Button Scrolling Button" 2 # Это средняя кнопка мыши. Уже по умолчанию 2
Описание из man libinput
:
- libinput Scroll Method Enabled 3 булевых значения (8 бит, 0 или 1), по порядку “двумя пальцами”, “край”, “кнопка”. Указывает, какой метод прокрутки в данный момент включен на этом устройстве.
- libinput Button Scrolling Button 1 32-битное значение. Задает номер кнопки, используемой для прокрутки кнопкой. Это значение не зависит от метода прокрутки, чтобы включить прокрутку с кнопкой, она должна быть установлена на кнопку-прокрутку и должна быть задана действительная кнопка.
- Вы можете добавить это в shell скрипт и запускать при входе в систему.
- Как колесо мыши, с таким же движением, при нажатии Ctrl увеличит/уменьшит страницу. Ctrl + 0 для сброса.
- Это работает с X и вероятно, с Wayland.
Для функциональности автопрокрутки в Firefox
Firefox > настройки > поиск автопрокрутки и включите ее
в Firefox, который идет с ванильной Ubuntu, она иногда отключена
если вы хотите дальше настраивать настройки вашей мыши, как в панели управления ниже, возможно, вам стоит установить gnome-tweak-tool
Вторая альтернатива
-
Измените поведение средней кнопки мыши через
xinput
. -
Введите ниже код для опроса входных устройств и периферийных устройств
xinput list
-
теперь моя мышь – 9
-
теперь напишите это в терминал
input set-prop 9 “libinput Scroll Method Enabled” 0, 0, 1
-
теперь проверьте поведение мыши, когда вы нажимаете среднюю кнопку и перемещаетесь вверх или вниз в любом приложении с вертикальной прокруткой [большой текст /документ].
Расширяя ответ Брендона Даффани – его скрипт не работал на моей системе (Ubuntu 20.04.3 LTS), и после некоторой отладки я обнаружил, что это, вероятно, из-за цикла for. Он вел себя так, как будто массив pointer_ids
был полон пустых значений, и скрипт просто продолжал возвращать не удается найти устройство
. Я понял, что это какая-то хитрость bash с плохо распознанными значениями массива, поэтому переписал цикл.
Я создал небольшой bash-скрипт <path-to-file>/middle-click-emulation.sh
:
#!/bin/bash
# Включает средний клик для прокрутки (как в Windows).
pointerids=($(xinput list | grep "pointer" | perl -p -e 's@.*?id=(\d+).*@\1@'))
for ((i = 0; i < ${#pointerids[@]}; i++))
do
echo "Настройка для устройства с id = ${pointerids[$i]}"
# Если указатель поддерживает метод прокрутки, настройте средний клик для скроллинга
if xinput list-props ${pointerids[$i]} | grep 'Scroll Method Enabled' &>/dev/null; then
xinput set-prop ${pointerids[$i]} 'libinput Scroll Method Enabled' 0 0 1
fi
done
Вручную создал ярлык рабочего стола в ~/.config/autostart/middle_click_to_scroll.sh
:
#!/usr/bin/env xdg-open
[Desktop Entry]
Type=Application
Name=Эмуляция среднего клика для прокрутки
Exec="<path-to-file>/middle-click-emulation.sh"
X-GNOME-Autostart-Phase=Initialization
Terminal=false
NoDisplay=true
И дал исполнительные привилегии обоим bash-скрипту и ярлыку на рабочем столе.
А затем вручную запустил скрипт, чтобы не перезагружать систему 🙂
Спасибо, Брендон 🙂
P.S.: Я думаю, вы все еще можете использовать скрипт Брендона, который создает ярлыки рабочего стола для вас, если замените только цикл for (обратите внимание на имя массива).
Решил автоматизировать ответ Пабло А, так как я обнаружил его как лучший (поскольку он работает во всех приложениях, а не только в Firefox).
Сохраните этот файл как скрипт (например: ~/setup_middle_click_scrolling.sh
), сделайте его исполняемым с помощью chmod +x
, затем запустите его (вы можете удалить его после запуска). Он включает средний клик для прокрутки, а также добавляет скрипт автозапуска, так что эта функция будет доступна при каждом входе в систему.
#!/bin/bash
# Включает средний клик для прокрутки (как в Windows).
set -e
: ${SCRIPT_PATH:=~/.config/autostart/middle_click_to_scroll.sh}
: ${DESKTOP_PATH:=~/.config/autostart/middle_click_to_scroll.desktop}
# Создайте директории, если они не существуют.
echo "$SCRIPT_PATH" "$DESKTOP_PATH" | xargs dirname | xargs mkdir -p
# Создайте скрипт, который может быть запущен по требованию.
# При запуске включает средний клик для прокрутки.
cat > "$SCRIPT_PATH" << EOF
#!/bin/bash
# Получите идентификаторы устройств всех устройств, содержащих "указатель"
pointer_ids=(\$(xinput list | grep pointer | perl -p -e 's@.*?id=(\d+).*@\1@'))
for pointer_id in "\${pointer_ids[@]}"; do
# Если указатель поддерживает метод прокрутки, настройте средний клик для прокрутки
if xinput list-props "\$pointer_id" | grep 'Scroll Method Enabled' &>/dev/null; then
xinput set-prop "\$pointer_id" 'libinput Scroll Method Enabled' 0 0 1
fi
done
EOF
chmod +x "$SCRIPT_PATH"
# Создайте запись на рабочем столе, чтобы он запускался при старте.
cat > "$DESKTOP_PATH" << EOF
[Desktop Entry]
Type=Application
Name=Средний клик для прокрутки
Exec="$SCRIPT_PATH"
X-GNOME-Autostart-Phase=Initialization
Terminal=false
NoDisplay=true
EOF
"$SCRIPT_PATH"
Надеюсь, люди в комментариях смогут указать, будет ли это работать на всех системах, но это работает с моей конфигурацией XFCE
+ libinput
+ стандартная 3-кнопочная мышь.
.
Ответ или решение
Использование средней кнопки мыши для прокрутки экрана — это хорошо знакомая функция в операционной системе Windows, что значительно упрощает навигацию по длинным документам или веб-страницам. Многие пользователи, мигрировавшие на дистрибутивы Linux, такие как Ubuntu или Mint, часто испытывают разочарование из-за отсутствия этой функции по умолчанию. В связи с этим возникает резонный вопрос: как реализовать эту функцию на Linux? Рассмотрим этот вопрос детально с использованием различных подходов.
Теория
Автоматическая прокрутка (автоскроллинг) позволяет при нажатии средней кнопки мыши перемещать мышь для гладкой прокрутки содержимого. На Linux, по умолчанию, нажатие средней кнопки мыши ассоциировано с вставкой содержимого из буфера обмена. Однако, существует несколько способов настроить эту функцию, используя конфигурацию как на уровне приложений, так и на системном уровне.
Пример
Настройка в браузерах
Firefox
- Откройте меню настроек: нажмите "≡" и выберите "Настройки".
- Перейдите в раздел "Общие".
- Прокрутите страницу до "Просмотр веб-страниц". Найдите и поставьте флажок рядом с "Использовать автоскролл" для активации этой функции.
Chrome/Chromium
Для Chrome и браузеров на его основе, таких как Chromium и Edge, можно использовать расширение "AutoScroll".
- Перейдите в магазин Chrome Web Store и найдите расширение "AutoScroll".
- Добавьте его в ваш браузер нажатием на кнопку "+ Добавить в Chrome".
Настройка на системном уровне
Использование библиотеки libinput
позволяет настроить системы на уровне драйверов ввода, поддерживая этим функцию автоскролла не только в браузерах, но и в других приложениях.
- Определите ID вашего устройства ввода командой
xinput list
. - Измените свойства устройства через
xinput
:xinput set-prop <deviceID> "libinput Scroll Method Enabled" 0, 0, 1 xinput set-prop <deviceID> "libinput Button Scrolling Button" 2
Применение
Вышеописанные шаги дают возможность многим пользователям вернуть привычное поведение мыши на их Linux-дистрибутивах. Однако по-прежнему остаётся проблема интеграции таких изменений на глобальном системном уровне для всех приложений. Это может создать сложности у менее опытных пользователей. Здесь полезным явится использование автоматических скриптов, которые устанавливают нужные параметры при запуске системы.
Автоматизация этих настроек через сценарии shell или конфигурации xinput позволит гарантировать установку необходимых параметров при каждой загрузке системы, обеспечивая комфортную работу независимо от используемых приложений.
Сценарии автоматизации
Создание сценариев для автоматической настройки функций — один из самых эффективных путей. Скрипт может быть выполнен один раз для создания запускаемых файлов, которые будут применять нужные настройки при каждой загрузке системы. Пример скрипта:
#!/bin/bash
pointer_ids=( $(xinput list | grep pointer | awk '{ print $6 }' | sed 's/id=//') )
for id in "${pointer_ids[@]}"; do
if xinput list-props $id | grep 'Scroll Method Enabled' &>/dev/null; then
xinput set-prop $id 'libinput Scroll Method Enabled' 0 0 1
fi
done
Такой сценарий можно установить в конфигурациях автозагрузки рабочего стола, обеспечив тем самым автоматическую настройку среды при каждом входе в систему пользователя.
Заключение
Соответствие пользовательскому опыту, приобретённому на других системах, может стать ключевым фактором в принятии Linux пользователями. Хотя Linux и предлагает более низкоуровневую настройку поведения устройств ввода, требуя некоторых знаний и навыков, возможности по автоматизации конфигурации делают эти дистрибутивы более доступными и удобными для широкой аудитории.
Надеемся, что предложенные решения помогут вам вернуть комфорт в использование Linux, реализовав функциональность автоскроллинга, присущую Windows, на уровне браузеров и системы.