Ứng dụng Qt không tuân theo Xmodmap


7

Cách đây rất lâu, tôi đã tạo một ~/.Xmodmapđảo ngược 45để tạo "cuộn tự nhiên":

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

Tôi nguồn .Xmodmaptrong .xinitrcthời trang tiêu chuẩn ( xmodmap $HOME/.Xmodmap &). Điều này đã làm việc trong nhiều năm mà không có vấn đề.

Tôi vừa mới cài đặt một ứng dụng được gọi là cockatrice. Tôi không có vấn đề nào khác với chương trình, ngoại trừ, vì một số lý do, khi tôi cuộn bên trong chương trình, hướng cuộn của tôi không "tự nhiên" (nghĩa là như thể tôi .Xmodmapkhông chỉ tuân theo ứng dụng này).

Lúc đầu, tôi nghĩ rằng nó là một vấn đề với mô-đun đầu vào Qt của tôi, nhưng tôi nhận ra rằng tôi đã tuyên bố một cách chính xác QT_IM_MODULEđể ximtrong tôi .xinitrc, và tôi chưa bao giờ có vấn đề này với bất kỳ ứng dụng khác.

Đây có phải là một vấn đề dành riêng cho ứng dụng hay đây là vấn đề cụ thể của Qt? Tôi nên làm gì để khắc phục sự cố này (hoặc giải quyết nó)?

Cố gắng thiết lập điều này phổ biến thông qua xinputthất bại:

$ 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

Câu trả lời:


6

Nó dường như là cụ thể của Qt (từ việc thử trong Qt Assistant). Tôi nghĩ rằng đó là bởi vì Qt chỉ sử dụng khoảng cách cuộn cho các sự kiện bánh xe của nó.

Thay vì sử dụng xmodmap tại đây, bạn có thể đặt khoảng cách cuộn của mình thành các giá trị âm.

Bạn có thể thiết lập nó thông qua một tập tin /etc/X11/xorg.conf.d/, cho một con chuột được quản lý bởi evdev:

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

Hoặc bạn có thể thử với xinputđầu tiên:

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

(Để lấy id thiết bị xinput list:)

Các thuộc tính được liệt kê với các thiết bị thực tế. Ở đây xinput list-props 12nên liệt kê các thuộc tính của bàn di chuột. Vì nó là một bàn di chuột synap, nên từ trang này , tài sản phải là:

xinput set-prop <touchpad id> "Synaptics Scrolling Distance" -1 -1 (Chỉ có hai giá trị, cạnh dọc và ngang.)

Đối với quy tắc trong tệp cấu hình, nó sẽ hoạt động với MatchIsTouchpad:

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

Tôi giả sử sử dụng giải pháp này có nghĩa là không còn sử dụng xmodmapvà sau đó hy vọng rằng nó sẽ hoạt động phổ biến? (Không nhất thiết là điều xấu, chỉ cần làm rõ.)
HalosGhost

@HalosGhost Có nó nên hoạt động ở mọi nơi. Và xmodmap không nên được sử dụng cùng một lúc, nếu không, cuộn sẽ bị đảo ngược hai lần đối với một số ứng dụng ..
Leiaz

Cuối cùng tôi đã có xung quanh để kiểm tra điều này, nhưng tệp xorg conf không có hiệu lực và kiểm tra thông qua xinputtạo ra lỗi tôi đề cập trong chỉnh sửa của OP.
HalosGhost

@HalosGhost Cập nhật. Đối với bàn di chuột synap, thuộc tính dường như là "Khoảng cách di chuyển của Synaptics".
Leiaz

Cấu hình cập nhật có hiệu ứng mong muốn nhưng tạo ra hiệu ứng phụ của việc cuộn cực kỳ nhanh.
HalosGhost

1

Tôi muốn bổ sung câu trả lời của @ Leiaz.
Trong trường hợp của tôi, tôi đang sử dụng Logitech M325 .
$ xinput

Con trỏ lõi ảo id = 2 [con trỏ chính (3)]
⎜ Lõi ảo con trỏ Xtx id = 4 [con trỏ nô lệ (2)]
⎜ ↳ HID 04b4: 0823 id = 10 [con trỏ nô lệ (2)]
⎜ ↳ Logitech M325 id = 12 [con trỏ nô lệ (2)]
⎜ Logitech M185 / M225 id = 11 [con trỏ nô lệ (2)]

$ xinput list-props 12

Thiết bị 'Logitech M325':
Đã bật thiết bị (152): 1
Ma trận chuyển đổi tọa độ (154): 1.000000,
0,000000, 0,000000, 0,000000, 1,000000, 0,000000, 0,000000, 0,000000, 1,000000 libinput Tốc độ Accel (286):
0,000000 287):
0,000000 libinput Hồ sơ Accel Có sẵn (288): 1, 1
libinput Hồ sơ Accel đã bật (289): 1, 0
libinput Cấu hình Accel Mặc định được bật (290): 1, 0
libinput Di chuyển tự nhiên Đã bật (288): 0
libinput Di chuyển tự nhiên Đã bật Mặc định (292): 0
libinput Gửi các chế độ Sự kiện có sẵn (271): 1, 0
libinput Chế độ gửi sự kiện được bật (272): 0, 0
libinput Chế độ gửi sự kiện được bật Mặc định (273): 0, 0
libinput Đã bật tay trái (293): 0
libinput Mặc định kích hoạt bằng tay trái (294): 0
libinput Phương thức cuộn có sẵn (295) ): 0, 0, 1
libinput Phương thức cuộn được bật (296): 0, 0, 0
libinput Phương thức cuộn mặc định (297): 0, 0, 0
libinput Nút cuộn nút (298): 2
Nút libinput Mặc định Nút cuộn ): 2
libinput Middle Emulation được kích hoạt (300): 0
libinput Middle Emulation được kích hoạt Mặc định (301): 0
Nút thiết bị (274): "/ dev / input / event16"
ID sản phẩm thiết bị (275): 1133, 16394
libinput Nút khóa kéo (302):
libinput Cuộn ngang được bật (303): 1

Lưu ý rằng có thuộc tính "Di chuyển tự nhiên được bật (291)", thay đổi thành "1", hướng của bánh xe chuột của bạn sẽ ngược lại.
$ xinput set-prop 12 291 1

Nếu bạn muốn gói thủ tục trong tập lệnh shell, thì đây là:

#!/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]" 

Thay đổi "Logitech M325" thành tên thiết bị của chính bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.