Zmień prędkość przewijania za pomocą libinput

16

Moje kółko myszy przewija się zbyt wolno, więc chcę zwiększyć liczbę linii dla każdego „tiknięcia” przewijania. Przeczytałem, że jest to możliwe poprzez ustawienie Evdev Scrolling Distancez xinput, jednak używam libinputi nie widzę nic związanego z odległością przewijania.

Dane wyjściowe z xinput list-propsmojej myszy:

Device Enabled (139):   1                                                                                                       
Coordinate Transformation Matrix (141): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
libinput Accel Speed (275): -0.640000                                                                                           
libinput Accel Speed Default (276): 0.000000                                                                                    
libinput Accel Profiles Available (277):    1, 1                                                                                
libinput Accel Profile Enabled (278):   1, 0                                                                                    
libinput Accel Profile Enabled Default (279):   1, 0                                                                            
libinput Natural Scrolling Enabled (280):   0                                                                                   
libinput Natural Scrolling Enabled Default (281):   0                                                                           
libinput Send Events Modes Available (259): 1, 0                                                                                
libinput Send Events Mode Enabled (260):    0, 0                                                                                
libinput Send Events Mode Enabled Default (261):    0, 0                                                                        
libinput Left Handed Enabled (282): 0                                                                                           
libinput Left Handed Enabled Default (283): 0                                                                                   
libinput Scroll Methods Available (284):    0, 0, 1                                                                             
libinput Scroll Method Enabled (285):   0, 0, 0                                                                                 
libinput Scroll Method Enabled Default (286):   0, 0, 0                                                                         
libinput Button Scrolling Button (287): 2                                                                                       
libinput Button Scrolling Button Default (288): 274                                                                             
libinput Middle Emulation Enabled (289):    0                                                                                   
libinput Middle Emulation Enabled Default (290):    0                                                                           
Device Node (262):  "/dev/input/event1"                                                                                         
Device Product ID (263):    1133, 50487                                                                                         
libinput Drag Lock Buttons (291):   <no items>                                                                                  
libinput Horizonal Scroll Enabled (264):    1                                                  

Jak mogę zmienić prędkość przewijania? Pracuję na Arch Linux, Xfce 4.12.

Andrew Sun
źródło
1
Teraz jest żądanie funkcji libinput, aby to zaimplementować (dzięki uprzejmości @clel ).
n.

Odpowiedzi:

4

Obecnie nie ma interfejsu API do zmiany prędkości przewijania dla urządzeń libinput, ale ten blog wyjaśnia, w jaki sposób kliknięcia kółka myszy odpowiadają kątowi ruchu, który można zmienić dla każdej myszy w pliku konfiguracyjnym udev systemud /usr/lib/udev/hwdb.d/70-mouse.hwdb. Przeczytaj komentarze MOUSE_WHEEL_CLICK_ANGLEna początku tego pliku.

Aby wprowadzić lokalną zmianę, utwórz nowy plik

 /etc/udev/hwdb.d/71-mouse-local.hwdb

i dodaj swoją nadrzędną regułę. Na przykład, jeśli masz mysz ImExPS / 2, możesz podwoić domyślną 15 stopni na kliknięcie do 30 stopni za pomocą

# ImExPS/2 Logitech Wheel Mouse
mouse:ps2:*:name:ImExPS/2 Logitech Wheel Mouse:
 MOUSE_DPI=400@250
 MOUSE_WHEEL_CLICK_ANGLE=30

Załaduj ponownie bazę danych udev

 sudo udevadm hwdb --update
 sudo udevadm trigger /dev/input/event1
meuh
źródło
1
There is no current api for changing the scroll speed for libinput devices: czy to się zmieniło od tego czasu?
orschiro
1
@orschiro Mam wrażenie, że API nie jest intencją. Mamy nadzieję, że wszystkie urządzenia zostaną poprawnie zidentyfikowane i skonfigurowane w udev, a więc nie ma potrzeby konfiguracji użytkownika. Sprawdź wszystkie blogi libinput . W szczególności 1.4 odpowiada ukończeniu początkowej listy TODO dla libinput.
Meuh
4
w Ubuntu 16.10 system udev conf znajduje się w /lib/udev/hwdb.d/70-mouse.hwdb
Jonas Berlin
2
zresztą zrobić to samo z touchpadem?
Francesco
1
@daboross Tak. Należy wziąć pod uwagę dwa aspekty: powyższa odpowiedź po prostu próbuje znormalizować dane wyjściowe z urządzenia, aby na przykład, gdy użytkownik wykona taką samą ilość ruchu na 2 różnych myszach, na przykład system może obliczyć, że są one równoważne, pomimo raportów od innego sprzętu. Drugim aspektem jest więc to, jak duży ruch ekranu powinien to reprezentować, i jest to określane przez złożoną ilość oprogramowania skierowanego do użytkownika, takiego jak zestaw narzędzi graficznych, system okien, dpi ekranu i tak dalej.
Meuh
3

Libinput nie ma żadnej koncepcji „dla każdego przewijania kół, rób n linii / stopni” jako wspólnej partii, na razie ustawienie wydaje się być specyficzne dla urządzenia, ponieważ niektóre Logitech ma parametr, Evdev Scrolling Distance (278)który prawdopodobnie był dostarczany z „starym” Zawiera sterownik Evdev.

Moim zdaniem będzie to uważane za regresję dla doświadczenia użytkownika, w którym początkowo odmówiono włączenia czułości przewijania myszy konfigurowalnej do wspólnego zestawu narzędzi (libinput), teraz jest to część prośby o pobranie w przyszłych wersjach - być może wywołania funkcji będą musiały zostać zaimplementowane w każdym środowisku pulpitu.

Istnieje wiele możliwości rozwiązania tego problemu, ale zależy to od dystrybucji systemu Linux.

  1. Mieć szczęście i mieć czułość przewijania zależną od sterownika - sprawdź, wyszukując wszystkie dane wejściowe ze zmiennymi przewijania:

    lista xinput | cut -f2 | cut -f2 -d '=' | \
                xargs -d $ '\ n' -I '{}' sh -c "xinput list-props '{}' | grep -iq scroll && \
                                        (echo Listing dev id '{}'; xinput list-props '{}') "
    i ustawienie konkretnej zmiennej przez , gdzie może być nazwa urządzenia i nazwa ustawienia.xinput --set-prop <ID> <SUB-ID> <values><ID><SUB-ID>

  2. Ogólną poprawką jest ponowne załadowanie kodu libinput i przebudowanie .

  3. Możesz spróbować przywrócić interfejs udevadm / evdev do X11, a następnie wypróbować zmienną X11 MOUSE_WHEEL_CLICK_ANGLE .

  4. Z odniesienia do ostatniego elementu można korzystać w imwheelcelu emulacji kliknięć przewijania myszy o wartości wielokrotnej.

    # Should use imwheel --kill --buttons "4 5" to restart imwheel,
    # if the mouse has back/forward buttons, otherwhise imwheel --kill is enough.
    # imwheel must be set to autostart in your DE tools.
    #Edit ~/.imwheelrc to include, where '3' is a multiplier
    ".*"
    None,      Up,   Button4, 3
    None,      Down, Button5, 3
    Control_L, Up,   Control_L|Button4
    Control_L, Down, Control_L|Button5
    Shift_L,   Up,   Shift_L|Button4
    Shift_L,   Down, Shift_L|Button5
    
  5. Istnieją określone ustawienia aplikacji dla czułości kółka myszy, takie jak Chrome SmoothScroll i Firefox SmoothWheel ref .

Mateus Matucuma Teixeira
źródło
1
Przejście Libinput było regresją UX na wiele sposobów, z których prawie wszystkie sprowadzają się do kontroli zachowania sprzętu przez użytkownika ... To niefortunne, biorąc pod uwagę platformę, na której się to dzieje.
Douglas Gaskell