通过自定义 ACCEL_MOUNT_MATRIX 更改 iio-sensors 数据

von*_*erg 5 gnome udev touch-screen sensors

我有一个带有内置传感器的平板电脑,它允许我基于iio-sensors-proxy. 但是,屏幕方向已关闭,我需要修复它。

在它的 GitHub 页面(https://github.com/systemd/systemd/blob/master/hwdb/60-sensor.hwdb)上解释了如何改变这种行为:创建一个文件/etc/udev/hwdb.d/61-sensor-local.hwdb并写入它

sensor:modalias:<parent device modalias>:dmi:<dmi string>
Run Code Online (Sandbox Code Playgroud)

ACCEL_MOUNT_MATRIX=1, 0, 0; 0, 1, 0; 0, 0, 1 
Run Code Online (Sandbox Code Playgroud)

(这个矩阵必须被改变)。

问题:我不知道如何获取第一行的必要信息,即传感器前缀。

解决方案:最终文件包含:

sensor:modalias:acpi:KIOX000A*:dmi:*:svnEVE*:pnEveV:*
    ACCEL_MOUNT_MATRIX=0, 1, 0; -1, 0, 0; 0, 0, 1
Run Code Online (Sandbox Code Playgroud)

到目前为止我发现了什么:

这给了我设备名称:

udevadm info --export-db | grep iio
P: /devices/pci0000:00/0000:00:15.0/i2c_designware.0/i2c-0/i2c-KIOX000A:00/iio:device0
N: iio:device0
E: DEVNAME=/dev/iio:device0
E: DEVPATH=/devices/pci0000:00/0000:00:15.0/i2c_designware.0/i2c-0/i2c-KIOX000A:00/iio:device0
E: DEVTYPE=iio_device
E: IIO_SENSOR_PROXY_TYPE=iio-buffer-accel
E: SUBSYSTEM=iio
E: SYSTEMD_WANTS=iio-sensor-proxy.service
Run Code Online (Sandbox Code Playgroud)

这为我提供了有关该设备的更多信息:

udevadm info -n "/dev/iio:device0" 
P: /devices/pci0000:00/0000:00:15.0/i2c_designware.0/i2c-0/i2c-KIOX000A:00/iio:device0
N: iio:device0
E: DEVNAME=/dev/iio:device0
E: DEVPATH=/devices/pci0000:00/0000:00:15.0/i2c_designware.0/i2c-0/i2c-KIOX000A:00/iio:device0
E: DEVTYPE=iio_device
E: IIO_SENSOR_PROXY_TYPE=iio-buffer-accel
E: MAJOR=245
E: MINOR=0
E: SUBSYSTEM=iio
E: SYSTEMD_WANTS=iio-sensor-proxy.service
E: TAGS=:systemd:
E: USEC_INITIALIZED=1959744
Run Code Online (Sandbox Code Playgroud)

通过 pci,我找到了所谓的 modalias:

cat /sys/devices/pci0000:00/0000:00:15.0/modalias
pci:v00008086d00009D60sv00008086sd00007270bc11sc80i00
Run Code Online (Sandbox Code Playgroud)

非常感谢从这里开始的帮助!


我的系统:Linux jva 4.14.5-1-ARCH #1 SMP PREEMPT Sun Dec 10 14:50:30 UTC 2017 x86_64 GNU/Linux 在 GNOME 3.26.2 下运行(Wayland-sesion)

平板电脑:Eve V i7Y

小智 4

我刚刚为我的 Lenovo Miix 320 解决了这个问题。

您已经有了驱动程序名称:

udevadm info -n  /dev/iio:device0
Run Code Online (Sandbox Code Playgroud)

对于您的情况:KIOX000A

然后使用 dmidecode 找出供应商和产品名称(在我的案例中,应该是第一个命中的产品名称 LENOVO 和 XF80):

dmidecode | grep Manufacturer
dmidecode | grep Product
Run Code Online (Sandbox Code Playgroud)

现在把这些东西放在一起:

sensor:modalias:acpi:[driver name]*:dmi:*:svn[Manufacturer]*:pn[Product Name]:*
Run Code Online (Sandbox Code Playgroud)

没有方括号。

我在以下位置找到了此信息:https ://www.aixin.fr/jipeblog/?p=119