# ST-LSM6DSX-SHIFT13MI (v1.2) Dieses Repositorium beinhaltet die Quelldaten des Pakets [st-lsm6dsx-shift13mi_1.2-1_amd64.deb](https://apt.twoexem.com/pool/main/s/st-lsm6dsx-shift13mi/), welches auf allen Geräten vom Typ SHIFT13mi / SHIFTbook der Firma SHIFT die Funktionsfähigkeit vom Gyroskop wiederherstellt. Mehr Hintergründe zu diesem Problem sind auf [der Forumsseite](https://forum.shiftphones.com/threads/reparatur-des-lagesensors-unter-linux-fur-die-automatische-bildschirmorientierung.7817/) zu finden. Dieses Paket wird nur solange nötig sein, bis ein Kernel-Patch im Mainline-Kernel ankommt. ## Um das Paket über meinen Server zu installieren: 1. GPG-Schlüssel importieren: $ curl https://apt.twoexem.com/key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/twoexem.gpg 2. Apt-Quelle hinzufügen: $ echo "deb [signed-by=/etc/apt/keyrings/twoexem.gpg] https://apt.twoexem.com stable main" | sudo tee /etc/apt/sources.list.d/twoexem.list 3. Paket installieren: # apt update # apt install st-lsm6dsx-shift13mi ## Um das Paket selbst auf Ubuntu zu installieren: 1. Repo klonen: $ git clone https://git.twoexem.com/twoexem/st-lsm6dsx-shift13mi/ cd st-lsm6dsx-shift13mi/ 2. Das Paket erstellen: $ dpkg-deb --build --root-owner-group st-lsm6dsx-shift13mi 3. Das Paket installieren: # apt install ./st-lsm6dsx-shift13mi.deb Zum Deinstallieren: # apt remove st-lsm6dsx-shift13mi ## Um das Paket auf allen anderen Distros OHNE DKMS zu installieren: ### Wichtig: Das Patch wird nach jedem Kernel-Update entfernt und muss neu installiert werden. 1. Kernel-Quellen herunterladen. Die relevanten Dateien sind: - drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_i2c.c - drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h - drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c - drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c - drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_shub.c 2. Die Datei st_lsm6dsx_i2c.c bearbeiten. Nach Zeile 146 muss folgender Inhalt eingefügt werden: { "SMOCF00", ST_LSM6DSO_ID, }, 3. Ein Makefile mit folgendem Inhalt erstellen: obj-m += st_lsm6dsx.o st_lsm6dsx_i2c.o st_lsm6dsx-objs := st_lsm6dsx_core.o st_lsm6dsx_buffer.o st_lsm6dsx_shub.o all: make -C /usr/lib/modules/$(shell uname -r)/build M=$(PWD) modules install: zstd -f st_lsm6dsx_i2c.ko -o st_lsm6dsx_i2c.ko.zst cp st_lsm6dsx_i2c.ko.zst /usr/lib/modules/$(shell uname -r)/kernel/drivers/iio/imu/st_lsm6dsx/ depmod -A clean: make -C /usr/lib/modules/$(shell uname -r)/build M=$(PWD) clean 4. Die geänderte Datei kompilieren: $ make 5. Das Paket installieren: # make install 6. Neue Datei /etc/udev/hwdb.d/10-sensor-shiftbook.hwdb erstellen und folgenden Inhalt einfügen: sensor:modalias:acpi:SMOCF00:* ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1 #### Wichtig: Das Leerzeichen vor der zweiten Zeile muss vorhanden sein. 7. Alle wichtigen Dienste neu starten: # systemd-hwdb update # udevadm trigger # systemctl restart iio-sensor-proxy ## Um das Paket auf allen anderen Distros MIT DKMS zu installieren: 1. Kernel-Quellen herunterladen. Die relevanten Dateien sind: 1. drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_i2c.c 2. drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h 3. drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c 4. drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c 5. drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_shub.c 2. Die Datei st_lsm6dsx_i2c.c bearbeiten. Nach Zeile 146 muss folgender Inhalt eingefügt werden: { "SMOCF00", ST_LSM6DSO_ID, }, 3. Ein Makefile mit folgendem Inhalt erstellen: obj-m += st_lsm6dsx.o st_lsm6dsx_i2c.o st_lsm6dsx-objs := st_lsm6dsx_core.o st_lsm6dsx_buffer.o st_lsm6dsx_shub.o 4. Eine Datei namens dkms.conf erstellen: PACKAGE_NAME="st-lsm6dsx-shift13mi" PACKAGE_VERSION="1.2" BUILT_MODULE_NAME[0]="st_lsm6dsx_i2c" BUILT_MODULE_LOCATION[0]="" DEST_MODULE_LOCATION[0]="/kernel/drivers/iio/imu/st_lsm6dsx/" AUTOINSTALL="yes" MAKE="make -C /usr/lib/modules/${kernelver}/build M=${dkms_tree}/${PACKAGE_NAME}/${PACKAGE_VERSION}/build" CLEAN="make -C /usr/lib/modules/${kernelver}/build M=${dkms_tree}/${PACKAGE_NAME}/${PACKAGE_VERSION}/build clean" 5. Den Treiber kompilieren und installieren: # dkms add st-lsm6dsx-shift13mi/1.2 # dkms build st-lsm6dsx-shift13mi/1.2 # dkms install st-lsm6dsx-shift13mi/1.2 6. Neue Datei /etc/udev/hwdb.d/10-sensor-shiftbook.hwdb erstellen und folgenden Inhalt einfügen: sensor:modalias:acpi:SMOCF00:* ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1 #### Wichtig: Das Leerzeichen vor der zweiten Zeile muss vorhanden sein. 7. Alle wichtigen Dienste neu starten: # systemd-hwdb update # udevadm trigger # systemctl restart iio-sensor-proxy Um den Treiber zu deinstallieren: # dkms remove st-lsm6dsx-shift13mi/1.2