Qt 애플리케이션은 Xmodmap을 존중하지 않습니다.

Qt 애플리케이션은 Xmodmap을 존중하지 않습니다.

오래 전에 나는 "자연스러운 스크롤"을 만들기 위해 ~/.Xmodmap역합 4을 만들었습니다.5

pointer = 1 2 3 5 4 7 6 8 9 10 11 12

표준 방식으로 리소스()를 얻습니다 .Xmodmap. 이것은 아무런 문제없이 수년 동안 작동했습니다..xinitrcxmodmap $HOME/.Xmodmap &

최근에라는 프로그램을 설치했습니다.cockatrice. 프로그램 내에서 스크롤할 때 어떤 이유로 스크롤 방향이 "자연스럽지" 않다는 점을 제외하고는 프로그램에 다른 문제가 없습니다. 즉, .Xmodmap이 앱만 내 스크롤 방향을 따르지 않는 것 같습니다.

처음에는 Qt 입력 모듈에 문제가 있는 줄 알았는데 Qt 입력 모듈에서 올바르게 선언했고 QT_IM_MODULE다른 응용 프로그램에서는 이런 문제가 발생하지 않았다는 것을 깨달았습니다.xim.xinitrc

이는 애플리케이션 관련 문제입니까, 아니면 Qt 관련 문제입니까? 이 문제를 추가로 해결하려면 어떻게 해야 합니까?

실패하여 보편적으로 설정해보십시오 xinput.

$ xinput list 
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad                id=12   [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
# unneeded information regarding my keyboard
$ xinput set-prop 2 "Evdev Scrolling Distance" -1 -1 -1
property 'Evdev Scrolling Distance' doesn't exist, you need to specify its type and format

답변1

Qt에 특정한 것 같습니다(Qt Assistant에서 시도해 보세요). Qt의 스크롤 휠 이벤트는 스크롤 거리만 사용하기 때문인 것 같습니다.

여기서 xmodmap을 사용하는 대신 스크롤 거리를 음수 값으로 설정할 수 있습니다.

/etc/X11/xorg.conf.d/evdev에서 관리하는 마우스의 경우 다음 파일을 통해 이를 설정할 수 있습니다.

Section "InputClass"
        Identifier "Reverse Scrolling"
        MatchIsPointer "on"
        Option "VertScrollDelta" "-1"
        Option "HorizScrollDelta" "-1"
        Option "DialDelta" "-1"
EndSection

아니면 xinput먼저 시도해 볼 수도 있습니다.

xinput set-prop <your device id> "Evdev Scrolling Distance" -1 -1 -1

(기기 ID를 받으세요 xinput list:)

이러한 속성은 실제 장치와 함께 나열됩니다. 터치패드의 속성이 여기에 나열되어야 합니다 xinput list-props 12. 시냅틱스 터치패드이기 때문에이 매뉴얼 페이지속성은 다음과 같아야 합니다.

xinput set-prop <touchpad id> "Synaptics Scrolling Distance" -1 -1(세로 가장자리와 가로 가장자리의 두 가지 값만 있습니다.)

구성 파일의 규칙은 다음과 동일해야 합니다 MatchIsTouchpad.

Section "InputClass"
        Identifier "Natural Scrolling"
        MatchIsTouchpad "on"
        Option "VertScrollDelta" "-1"
        Option "HorizScrollDelta" "-1"
EndSection

답변2

@Leiaz의 답변에 추가하고 싶습니다.
내 경우에는로지텍 M325.
$ xinput

⎡ 가상 코어 포인터 id=2 [마스터 포인터(3)]
⎜ ↳ 가상 코어 XTEST 포인터 id=4 [슬레이브 포인터(2)]
⎜ ↳ HID 04b4:0823 id=10 [슬레이브 포인터(2)]
⎜ ↳ 로지텍 M325 id=12 [슬레이브 포인터(2)]
⎜ ↳ 로지텍 M185/M225 id=11 [슬레이브 포인터(2)]

$ xinput list-props 12

장치 "Logitech M325":
활성화된 장치(152): 1
좌표 변환 매트릭스(154): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.0000 00
lib 입력 가속도(286) : 0.000000
libinput 가속도 속도 기본값 (287): 0.000000
libinput 가속 프로필 사용 가능(288): 1, 1
libinput 가속 프로필 활성화(289): 1, 0
libinput 가속 프로필 활성화 기본값(290): 1, 0
libinput 자연 스크롤 활성화(291): 0
libinput 자연 스크롤 활성화 기본값(292): 0
libinput 이벤트 보내기 모드 활성화(271): 1, 0
libinput 이벤트 보내기 모드 활성화(272): 0, 0
libinput 이벤트 보내기 모드 활성화 기본값(273): 0 , 0
libinput 왼쪽 활성화(293): 0
libinput 왼쪽 활성화 기본값(294): 0
libinput 스크롤 방법 활성화(295): 0, 0, 1
libinput 스크롤 방법 활성화(296): 0, 0, 0
libinput 스크롤 방법 활성화 기본값(297): 0, 0, 0
libinput 버튼 스크롤 버튼(298): 2
libinput 버튼 스크롤 버튼 기본값(299): 2
libinput 중간 에뮬레이션 활성화(300): 0
libinput 중간 에뮬레이션 활성화 기본값(301): 0
장치 노드 (274): "/dev/input/event16"
장치 제품 ID(275): 1133, 16394
libinput 드래그 잠금 버튼(302):
libinput 가로 스크롤 활성화(303): 1

"Natural Scrolling Enabled (291)" 속성이 있으므로 이를 "1"로 변경하면 마우스 휠 방향이 반전됩니다.
$ xinput set-prop 12 291 1

프로세스를 쉘 스크립트로 래핑하려면 다음을 수행하십시오.

#!/bin/bash

dev_id=$(xinput | sed -n '/Logitech M325/{s/^.*Logitech M325\s\+id=\([0-9]\+\).*$/\1/;p;}')

if [[ -z "$dev_id" ]];then
  exit 1
fi

nse_id=$(xinput list-props "$dev_id" | sed -n '/Natural Scrolling Enabled ([0-9]\+)/{s/^.*Natural Scrolling Enabled (\([0-9]\+\)).*/\1/;p;}')

if [[ -z "$nse_id" ]];then
  exit 1
fi

xinput set-prop "$dev_id" "$nse_id" 1
xinput list-props "$dev_id" | grep -o "Natural Scrolling Enabled ($nse_id):\s\+[0-9]" 

"Logitech M325"를 자신의 장치 이름으로 변경하세요.

관련 정보