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

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

我最近购买了一台带有硬盘加速计的非触摸屏惠普笔记本电脑。将其升级到 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

现在这个方向对我有用。

相关内容