Logitech Marble Mouse - Настройка модификатора прокрутки в Linux

Ситуация такова, что вы начинаете с командной строки, а затем вызываете startx , когда будете готовы. Эмпирически вы полагаете, что графический интерфейс пытается повторно выполнить .profile , а сценарий python не может выйти, поэтому графический интерфейс зависает.

Одно из решений, которое, возможно, стоит попробовать, - это установить переменную среды, чтобы ваш код запускался только один раз:

# This is .profile
#
if test -z "$DONE_PROFILE" -o "X$DONE_PROFILE" != "X${USER:-unknown}"
then
    # Protected code here will be called only once
    #
    echo "About to run keyboard polling"; sleep 3
    python /home/pi/poll_keyboard.py

    export DONE_PROFILE="${USER:-unknown}"
fi

Другой вариант - вызвать код, только если stdin подключен к терминалу:

# This is .profile
#
if test -t 0 -a -t 1
then
    # Protected code here will be called only if stdin and stdout is a tty
    #
    echo "About to run keyboard polling"; sleep 3
    python /home/pi/poll_keyboard.py
fi

Это второе предложение, вероятно, более безопасно, поскольку оно будет обрабатывать программы, которые входят в систему удаленно для запуска службы (например, rsync или scp ).

Вы даже можете объединить два, чтобы код учитывался только один раз, а затем выполнялся только в том случае, если stdin и stdout подключены к терминалу. (Просто вложите операторы if ... fi .)


Меня попросили объяснить условие test , которое защищает код в первом примере.

 if test -z "$ DONE_PROFILE" -o "X $ DONE_PROFILE"! = "X $ {USER: -unknown}" 
 

Это может быть записано на английском языке как " If $ DONE_PROFILE пуст или $ DONE_PROFILE не соответствует $ USER ... ".

Конструкция $ {USER: -unknown} заменяет unknown , если $ USER пусто или не задано.

В этом случае, вероятно, нет необходимости помещать X перед обеими сторонами выражения ! = , но это связано с защитным подходом к написанию сценариев.Рассмотрим переменную $ A со значением -z и другую переменную $ B со значением apple . В некоторых оболочках запись test "$ A"! = "$ B" будет заменена на test -z! = Apple , что синтаксически неверно. Добавление к обеим сторонам префикса X приведет к расширению test X-z! = Xapple , что является синтаксически безопасным.

2
25.05.2017, 09:28
2 ответа

Я использую производную от Arch (Antergos), и эта конфигурация была получена с их вики-страницы Marble Mouse.

Добавьте следующее в файл /usr/share/X11/xorg.conf.d/40-libinput.conf...

# Section added for scroll with Marble Mouse
Section "InputClass"
    Identifier      "Marble Mouse"
    MatchProduct    "Logitech USB Trackball"
    Driver          "libinput"
    Option          "ButtonMapping" "1 2 3 4 5 6 7 0 9"
    Option          "ScrollMethod" "button"
    Option          "ScrollButton" "8"
    Option          "MiddleEmulation" "on"
EndSection

Обратите внимание, что операция кнопки «Назад» отключена, поскольку она иногда срабатывал при попытке прокрутки.

3
27.01.2020, 22:03

Я использую следующую конфигурацию (, похожую на @PeterL, но не отключающую кнопку «Назад»)

/etc/X11/xorg.conf.d/10 -libinput.conf

Section "InputClass"
     Identifier "Marble Mouse"
     MatchProduct "Logitech USB Trackball"
     Driver "libinput"
     Option "ScrollMethod" "button"
     Option "ScrollButton" "8"
     Option "AccelSpeed" "1"
     # Option "TransformationMatrix" "2.4 0 0 0 2.4 0 0 0 1"
EndSection

Закомментированная TransformationMatrix позволяет пропускать пиксели и двигаться быстрее, но вместо этого я предпочитаю изменять DPI, как показано ниже.

  • Задайте пользовательский DPI через /etc/udev/hwdb.d/71 -мышь -local.hwdb
# Logitech Marble Mouse
#id obtained by: mouse-dpi-tool  /dev/input/event4
mouse:usb:v046dpc408:name:Logitech USB Trackball:
# keep space below
 MOUSE_DPI=100@125

, а затем udevadm hwdb --update, udevadm control --reload-rules && udevadm triggerи отключите, подключите мышь. DPI 100 может быть слишком чувствительным для некоторых, вы можете заменить его на 200@125.

0
30.10.2020, 12:07

Теги

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