pmos
pmos or postmarketos is a Linux distribution for mobile devices based on Alpine Linux . I have installed pmos in Note6Pro on 2026-07-28.
I initialy installed swmo desktop i.e sxmo-de-sway but later moved to phosh and testing kde plasma in between. Plasma was quite unusable. The swmo doesn’t have display file for my phone, so gesture navigation was not working. Only button navigation was working.
Phosh works great except the battery is draining very fast. Audio is not working. 4G not working was a known issue. Since i don’t have a sim to use, this doesn’t matter.
tiny-dm
When installing any desktop met package, apk displays the below message about commands to handle tiny-dm.
If you want to use/experience a desktop you should:
doas tinydm-set-session -s /usr/share/wayland-sessions/swmo.desktop
To change from an existing desktop session, run:
doas tinydm-set-session -f -s /usr/share/wayland-sessions/swmo.desktop
Tiny-dm is helpful to restart desktop sessions from ssh, if the touch screen is misbehaving or not working. To restart,
doas service tinydm restart
swmo
https://sxmo.org/docs/user/sxmo.7.html↗
Device Profile
Without a proper device profile file, a phone is quite unusable.
Identify compatible string as per the instruction given in Devices guide↗ .
prabu@xiaomi-tulip ~> tr -c '0[:alnum:].,-' '_' <
/proc/device-tree/compatible | tr '0' 'n' | head -n1
xiaomi,tulip
qcom,sdm636
sxmo looks up profile scripts named after the compatible string (comma included). The default installation doesn’t have one for Note6Pro .
prabu@xiaomi-tulip ~> apk info sxmo-utils --all |grep xiaomi
cmd:sxmo_deviceprofile_xiaomi,beryllium-ebbg.sh=1.18.1-r4
cmd:sxmo_deviceprofile_xiaomi,beryllium.sh=1.18.1-r4
cmd:sxmo_deviceprofile_xiaomi,daisy.sh=1.18.1-r4
cmd:sxmo_deviceprofile_xiaomi,elish.sh=1.18.1-r4
cmd:sxmo_deviceprofile_xiaomi,mido.sh=1.18.1-r4
cmd:sxmo_deviceprofile_xiaomi,polaris.sh=1.18.1-r4
cmd:sxmo_deviceprofile_xiaomi,tissot.sh=1.18.1-r4
usr/bin/sxmo_deviceprofile_xiaomi,beryllium-ebbg.sh
usr/bin/sxmo_deviceprofile_xiaomi,beryllium.sh
usr/bin/sxmo_deviceprofile_xiaomi,daisy.sh
usr/bin/sxmo_deviceprofile_xiaomi,elish.sh
usr/bin/sxmo_deviceprofile_xiaomi,mido.sh
usr/bin/sxmo_deviceprofile_xiaomi,polaris.sh
usr/bin/sxmo_deviceprofile_xiaomi,tissot.sh
Started with existing template: xiaomi,mido.sh (Redmi Note 4) by copying it as base:
doas cp /usr/bin/sxmo_deviceprofile_xiaomi,mido.sh \
"/usr/bin/sxmo_deviceprofile_xiaomi,tulip.sh"
Gestures
On restarting the session, noticed that gestures are not working. Checked gesture daemon:
pgrep -a lisgd
Found no output i.e daemon not running. Found lisgd is managed by superd:
find / -iname '*lisgd*' 2>/dev/null
/usr/share/superd/services/sxmo_hook_lisgd.service
/usr/share/sxmo/default_hooks/sxmo_hook_lisgdstart.sh
On checking service status/logs:
superctl status sxmo_hook_lisgd
cat ~/.local/state/superd/logs/sxmo_hook_lisgd.log
Status: failed
libinput error: client bug: Invalid path /dev/input/by-path/first-touchscreen
Couldn't bind event from dev filesystem
The issue was due to default lisgd input path
(/dev/input/by-path/first-touchscreen) does not exist on this
device; no udev by-path symlink generated for the touch controller.
To find the correct touchscreen device, listed input devices:
cat /proc/bus/input/devices
N: Name="nt36672a-e7t-ts"
H: Handlers=event4
B: ABS=260800000000003
Sysfs=.../platform/soc@0/c175000.i2c/i2c-0/0-0001/input/input4
Verified with evtest (tapped screen):
doas evtest /dev/input/event4
Input device name: "nt36672a-e7t-ts"
Event: type 3 (EV_ABS) code 53 (ABS_MT_POSITION_X) value 513
Event: type 3 (EV_ABS) code 54 (ABS_MT_POSITION_Y) value 1566
Confirmed existing by-path symlink maps to same event node:
ls -la /dev/input/by-path/
platform-c175000.i2c-event -> ../event4
So set SXMO_LISGD_INPUT_DEVICE explicitly in device profile:
export SXMO_LISGD_INPUT_DEVICE="/dev/input/by-path/platform-c175000.i2c-event"
Vibration
Vibrate device path was identified from /proc/bus/input/devices,
haptics device identified:
N: Name="spmi_haptics"
Sysfs=.../800f000.spmi/spmi-0/0-01/800f000.spmi:pmic@1:vibrator@c000/input/input5
It was added.
export SXMO_VIBRATE_DEV="/dev/input/by-path/platform-800f000.spmi-platform-800f000.spmi:pmic@1:vibrator@c000-event"
Buttons
For Power/volume button names Sysfs paths differ from other templates
(800f000.spmi vs c440000.spmi) but driver-exposed device names
are identical across variants. So no changes made and kept mido’s
original values unchanged:
N: Name="pm8941_pwrkey"
N: Name="pm8941_resin"
export SXMO_POWER_BUTTON="0:0:pm8941_pwrkey"
export SXMO_VOLUME_BUTTON="1:1:gpio-keys 0:0:pm8941_resin"
The changes to device profile does not take effect after superctl restart
superctl restart sxmo_hook_lisgd
error received from superd: failed to start
Log still showed old invalid path even after editing the profile file. Probably env vars are exported once at session start; restarting a single superd-managed service reuses the daemon’s existing (stale) environment rather than re-sourcing the profile.
So full sxmo session logout / login by tiny-dm restart re-runs init and re-sources the profile with new values and gestures started working.
pgrep -a lisgd
8572 sxmo_hook_lisgd
8573 lisgd
device profile
Here’s the final confirmed working device profile: /usr/bin/sxmo_deviceprofile_xiaomi,tulip.sh
#!/bin/sh
# Redmi Note 6 Pro (tulip)
# SPDX-License-Identifier: AGPL-3.0-only
# Copyright 2022 Sxmo Contributors
export SXMO_MONITOR="DSI-1"
export SXMO_SWAY_SCALE="2"
export SXMO_POWER_BUTTON="0:0:pm8941_pwrkey"
export SXMO_VOLUME_BUTTON="1:1:gpio-keys 0:0:pm8941_resin"
export SXMO_VIBRATE_DEV="/dev/input/by-path/platform-800f000.spmi-platform-800f000.spmi:pmic@1:vibrator@c000-event"
export SXMO_LISGD_INPUT_DEVICE="/dev/input/by-path/platform-c175000.i2c-event"
© Prabu Anand K 2020-2026