非触摸屏笔记本电脑上的加速度计+屏幕旋转?

MrW*_*rWm 8 debian hard-disk sensors joystick

我最近有一台带硬盘加速计的非触摸屏惠普笔记本电脑。将其升级到 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   
Run Code Online (Sandbox Code Playgroud)

编辑:

我发现这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...
Run Code Online (Sandbox Code Playgroud)

编辑2:

经过一些谷歌搜索后,我遇到了这个问题,这让我找到了一些有趣的文件,这些文件对此几乎没有帮助。:P

Geo*_*iou 7

您提到的整个故事实际上是 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在 root 终端中运行来澄清这个问题。此实用程序带有 iio-sensor-proxy 包,并在终端中显示加速度计的当前状态/当前屏幕方向。
如果监视器传感器正确显示方向,则它是 Cinnamon 错误。但我 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 评论中的建议进行应用。


小智 6

使用dconf-editor,更改键值

/org/cinnamon/settings-daemon/plugins/orientation/active
Run Code Online (Sandbox Code Playgroud)

到False。

这与上面介绍的命令行解决方案相同,但使用 gui 工具dconf-editor。