Applies to: Arch Linux, CachyOS, and other Linux distributions
Hardware: Generic 7″ mini laptops with Intel Celeron J4115 (and similar), Goodix GT911 touchscreen
Symptoms:
- Touchscreen stops responding after waking from suspend
- Screen is rotated 90° in the wrong direction at boot and on the login screen
Background
Cheap Chinese mini laptops — sold under various brand names (Alaaner, BINTEC, and others) — are increasingly popular as ultra-portable Linux machines. They typically feature a 7-inch IPS touchscreen, Intel Celeron J4115, 12GB DDR4, and run Linux surprisingly well.
However, two persistent annoyances appear when running Linux on these devices:
- The touchscreen stops working after the system wakes from suspend.
- The display is physically rotated 90°, so the boot screen, login screen, and desktop all appear sideways by default.
This guide covers all three fixes: boot screen rotation (Limine menu + fbcon), login screen rotation, and the touchscreen suspend bug.
Part 1: Boot Screen Rotation (Limine)
CachyOS uses the Limine bootloader. Limine v10+ natively supports interface rotation via the interface_rotation option in limine.conf.
Step 1 — Add rotation to limine.conf
sudo nano /boot/limine.conf
Add the following line at the very top of the file, before any entries:
interface_rotation: 90
Valid values are 0, 90, 180, 270. On this hardware, 90 is correct. Reboot to verify before proceeding.
Note:
/boot/limine.confis regenerated on every kernel update bylimine-update. The next step ensures the rotation setting survives updates automatically.
Step 2 — Make it permanent with a pacman hook
sudo mkdir -p /etc/pacman.d/hooks
sudo nano /etc/pacman.d/hooks/limine-rotation.hook
ini
[Trigger]
Operation = Install
Operation = Upgrade
Type = Package
Target = limine
Target = limine-mkinitcpio-hook
Target = linux-cachyos
Target = linux-cachyos-lts
[Action]
Description = Add interface_rotation to limine.conf
When = PostTransaction
Exec = /bin/sh -c 'grep -q "interface_rotation" /boot/limine.conf || sed -i "1s/^/interface_rotation: 90\n/" /boot/limine.conf'
This hook runs after any kernel or Limine update and adds the rotation line if it’s missing.
Step 3 — Rotate the fbcon boot text
The Limine menu is now rotated, but the Linux kernel’s framebuffer console (the text scrolling during boot) needs a separate parameter. Add it to /etc/default/limine:
sudo nano /etc/default/limine
Add:
KERNEL_CMDLINE[default]+="fbcon=rotate:1"
Then regenerate:
sudo limine-update
fbcon=rotate:1 = 90° clockwise. If text appears upside down, try rotate:3 instead.
Part 2: Login Screen Rotation (plasmalogin / KDE Plasma)
CachyOS with KDE Plasma uses plasmalogin as the display manager, running on Wayland. This means xrandr-based solutions won’t work. The correct approach is to copy KWin’s display configuration to the plasmalogin user.
Step 1 — Configure rotation in System Settings
Go to System Settings → Display and Monitor → Display Configuration, select your internal display (DSI-1), set the orientation to 90° Counter-Clockwise, and click Apply.
Alternatively, from the terminal:
kscreen-doctor output.DSI-1.rotation.right
Note: On this hardware,
rotation.right(270°) is the correct value for the physical screen orientation. Tryrotation.leftif the screen ends up upside down.
Step 2 — Locate the KWin output config
KDE Plasma stores display configuration in:
cat ~/.config/kwinoutputconfig.json
You should see "transform": "Rotated270" for your DSI-1 entry.
Step 3 — Copy config to plasmalogin
sudo mkdir -p /var/lib/plasmalogin/.config
sudo cp ~/.config/kwinoutputconfig.json /var/lib/plasmalogin/.config/
sudo chown -R plasmalogin:plasmalogin /var/lib/plasmalogin/.config/
Step 4 — Restart plasmalogin
sudo systemctl restart plasmalogin
The login screen should now appear correctly rotated.
Note for SDDM users: If your system uses SDDM on X11 instead of plasmalogin, try create
/etc/sddm.conf.d/display.confpointing to an Xsetup script that callsxrandr --output DSI-1 --rotate left. The plasmalogin/kwinoutputconfig approach above is specific to Wayland-based display managers.
Part 3: Touchscreen Stops Working After Suspend (Goodix GT911)
Diagnosis
Confirm you have a Goodix touchscreen:
sudo dmesg | grep -i "touch\|goodix"
You should see something like:
[ 10.833142] Goodix-TS i2c-GDIX1002:00: ID 911, version: 1060
[ 10.838322] input: Goodix Capacitive TouchScreen as /devices/...
Confirm the driver is built-in (not a loadable module):
sudo modprobe -r goodix
# Expected output: modprobe: FATAL: Module goodix not found.
Since the driver is compiled directly into the kernel, the usual modprobe -r / modprobe trick doesn’t work. Instead, we use the kernel’s sysfs bind/unbind interface.
Step 1 — Test manually
After waking from suspend, run:
echo "i2c-GDIX1002:00" | sudo tee /sys/bus/i2c/drivers/Goodix-TS/unbind
echo "i2c-GDIX1002:00" | sudo tee /sys/bus/i2c/drivers/Goodix-TS/bind
If the touchscreen starts responding again, proceed to step 2.
Step 2 — Create a systemd service
sudo nano /etc/systemd/system/touchscreen-resume.service
ini
[Unit]
Description=Reload Goodix touchscreen after resume
After=suspend.target
[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo "i2c-GDIX1002:00" > /sys/bus/i2c/drivers/Goodix-TS/unbind && echo "i2c-GDIX1002:00" > /sys/bus/i2c/drivers/Goodix-TS/bind'
[Install]
WantedBy=suspend.target
Step 3 — Enable the service
sudo systemctl daemon-reload
sudo systemctl enable touchscreen-resume.service
Step 4 — Test
Suspend your machine, wake it up, and verify the touchscreen works. You can also check the service ran correctly:
systemctl status touchscreen-resume.service
Why This Works
The unbind command tells the kernel to detach the Goodix driver from the I2C device. The bind command re-attaches it, triggering a full driver re-initialization — effectively resetting the touchscreen controller. This achieves the same result as modprobe -r / modprobe, but via the sysfs interface since the driver is built-in.
Notes
- The device path
i2c-GDIX1002:00may differ on your hardware. Check yours with:ls /sys/bus/i2c/drivers/Goodix-TS/ - Tested on CachyOS with kernel 6.19.6-1-cachyos and 6.18.16-1-cachyos-lts, KDE Plasma on Wayland, Limine bootloader v10+
- For hibernate support, add
hibernate.targettoWantedByin the systemd service - The
fbcon=rotateparameter affects only the Linux framebuffer console. Once the graphical session starts, rotation is handled by KWin viakwinoutputconfig.json - The
interface_rotationoption inlimine.confrequires Limine v10 or newer


