![非触摸屏笔记本电脑上的加速计+屏幕旋转?](https://linux22.com/image/102456/%E9%9D%9E%E8%A7%A6%E6%91%B8%E5%B1%8F%E7%AC%94%E8%AE%B0%E6%9C%AC%E7%94%B5%E8%84%91%E4%B8%8A%E7%9A%84%E5%8A%A0%E9%80%9F%E8%AE%A1%2B%E5%B1%8F%E5%B9%95%E6%97%8B%E8%BD%AC%EF%BC%9F.png)
我最近购买了一台带有硬盘加速计的非触摸屏惠普笔记本电脑。将其升级到 Debian 测试后,我注意到每当我将笔记本电脑向上倾斜超过 +45 度时,屏幕就会上下颠倒。当我将笔记本电脑倾斜 -45 度时,会发生相反的情况。为了澄清这一点,我面向我的笔记本电脑,屏幕面向我,键盘与地面平行。每当我顺时针或逆时针倾斜笔记本电脑时,屏幕也会旋转。
是否有一个文件可以编辑以更改屏幕的旋转方向?
中的加速度计/proc/bus/input/devices
显示了这一点:
I: Bus=0019 Vendor=0000 Product=0000 Version=0000
N: Name="ST LIS3LV02DL Accelerometer"
P: Phys=lis3lv02d/input0
S: Sysfs=/devices/platform/lis3lv02d/input/input7
U: Uniq=
H: Handlers=event6 js0
B: PROP=0
B: EV=9
B: ABS=7
编辑:
我发现这watch -n 1 'cat /sys/devices/platform/lis3lv02d/position'
与使用以下命令找到的内容类似。除了它只显示坐标,例如(18,18,1098)
。
evtest /dev/input/event6
显示这个:
william@wksp0:~/Downloads$ sudo evtest /dev/input/event6
Input driver version is 1.0.1
Input device ID: bus 0x19 vendor 0x0 product 0x0 version 0x0
Input device name: "ST LIS3LV02DL Accelerometer"
Supported events:
Event type 0 (EV_SYN)
Event type 3 (EV_ABS)
Event code 0 (ABS_X)
Value 20
Min -2304
Max 2304
Fuzz 18
Flat 18
Event code 1 (ABS_Y)
Value -38
Min -2304
Max 2304
Fuzz 18
Flat 18
Event code 2 (ABS_Z)
Value 1105
Min -2304
Max 2304
Fuzz 18
Flat 18
Properties:
Testing ... (interrupt to exit)
Event: time 1483747056.088195, type 3 (EV_ABS), code 1 (ABS_Y), value -23
Event: time 1483747056.088195, -------------- SYN_REPORT ------------
Event: time 1483747056.124189, type 3 (EV_ABS), code 0 (ABS_X), value 20
Event: time 1483747056.124189, type 3 (EV_ABS), code 1 (ABS_Y), value -38
Event: time 1483747056.124189, type 3 (EV_ABS), code 2 (ABS_Z), value 1105
Event: time 1483747056.124189, -------------- SYN_REPORT ------------
Event: time 1483747056.210931, type 3 (EV_ABS), code 0 (ABS_X), value -18
Event: time 1483747056.210931, type 3 (EV_ABS), code 1 (ABS_Y), value -28
Event: time 1483747056.210931, type 3 (EV_ABS), code 2 (ABS_Z), value 1107...
编辑2:
经过一番谷歌搜索后,我遇到了这这让我找到了一些有趣的文件,这些文件对此几乎没有任何帮助。 :P
答案1
您提到的整个故事实际上是 iio-sensor-proxy 或使用 iio-sensor-proxy 信息的 DE 代码中的一种错误。
不是 BIOS 或内核进行轮换,而是 iio-sensor-proxy 和桌面环境之间的结合。
像 Gnome(以及 Cinnamon)这样的 DE 会根据 dbus 中 iio-sensor-proxy 提供的数据自动旋转屏幕。
您可以尝试删除/清除 iio-sensor-proxy,屏幕旋转将完全消失。
目前尚不清楚这是 iio-sensor-proxy 错误还是 Cinnamon 错误。可能是 iio-sensor-proxy 以错误的方式读取您的加速计数据,也可能是 Cinnamon,即使它通过传感器代理接收到正确的数据,也会错误地旋转屏幕。
您可以通过monitor-sensor
在根终端中运行来澄清这个问题。该实用程序附带 iio-sensor-proxy 包,并在终端中显示加速度计的当前状态/当前屏幕方向。
如果监视器传感器正确显示方向,那么它就是一个 Cinnamon bug。但我 90% 确定这是一个iio-sensor-proxy
错误,您应该将其报告给开发人员。
PS:还有人提到,sensor-proxy 在 4.7 版本之前的内核上运行良好,但在 4.8 及更高版本的内核上存在一些问题。您可以尝试安装较旧的内核(即4.7)进行测试。
如果监视器传感器正确报告方向,并且这是一个 Cinnamon 错误,作为解决方法,您可以禁用 Cinnamon 自动屏幕旋转功能并运行一种 shell 脚本,该脚本将根据监视器传感器的数据进行正确的旋转。
PS:Gnome 提供了完全禁用自动屏幕旋转的选项,我不确定 Cinnamon 是否也有这个选项。
在 XFCE 中安装了 iio-sensor-proxy,但 XFCE 开发人员尚未执行自动屏幕旋转(尚未),我们应用此脚本来自动屏幕旋转:https://linuxappfinder.com/blog/auto_screen_rotation_in_ubuntu
PS:带有变换矩阵的触摸屏改进版本:https://github.com/gevasiliou/PythonTests/blob/master/autorotate.sh
更新以供将来参考/将来的“谷歌搜索”
正如评论中所建议的,通过monitor-sensor
在根终端中运行并观察 iio-sensor-proxy 提供的消息,证明 iio-sensor-proxy 正确理解了真实的屏幕方向。
因此,这似乎是一个 Cinnamon 错误,尽管它通过 iio-sensor-proxy 获取了正确的信息,但错误地旋转了屏幕。
您可以禁用 Cinnamon 自动旋转功能并尝试上面建议的自动旋转脚本(https://linuxappfinder.com/blog/auto_screen_rotation_in_ubuntu)。
要禁用 Cinnamon 内部自动旋转,您需要settings set org.cinnamon.settings-daemon.plugins.orientation active false
按照 OP 评论中的建议进行应用。
答案2
使用dconf-editor
,更改 的键值
/org/cinnamon/settings-daemon/plugins/orientation/active
到False
。
这与上面介绍的命令行解决方案相同,但使用 gui 工具dconf-editor
。
答案3
抱歉,如果我误解了某些内容,但我可以通过将 udev 中的方向矩阵设置为
# /etc/udev/hwdb.d/61-sensor-local.hwdb
sensor:modalias:acpi:BOSC0200:BOSC0200:*:dmi:*svnAcer:pnTravelMateSpinB311RN-31:*
ACCEL_MOUNT_MATRIX=0, -1, 0;-1, 0, 0; 0, 0, 1
然后我跑了
sudo systemd-hwdb update
sudo udevadm trigger
现在这个方向对我有用。