GPD Pocket 4
| Hardware | PCI/USB ID | Working? | |
|---|---|---|---|
| HX 370 | 8840U | ||
| GPU | 1002:150e |
1002:1900 |
Yes |
| Wi-Fi | 8086:2725 |
Yes | |
| Bluetooth | 8087:0032 |
Yes | |
| Audio | 1022:15e3 |
Yes | |
| Touchscreen | 0603:F001 |
Yes | |
| Keyboard/Pointer | 258a:000c |
Yes | |
| Webcam | 1bcf:28c4 |
1e08:5520 |
Yes |
| Fingerprint | 2808:0752 |
Partial | |
| Accelerometer | Yes | ||
The GPD Pocket 4 is a compact 8.8" convertible laptop with a 1600x2560 portrait display, touchscreen, and accelerometer for tablet mode.
lspci -nn and lsusb — the GPU and webcam are the parts known to differ between configurations.Screen orientation
The display panel is physically portrait (1600x2560) and requires rotation for normal laptop use: see Tablet PC#Screen rotation.
Touchscreen
The touchscreen (NVTK0603) requires calibration to match the display rotation.
Hyprland
Add a device section to your Hyprland configuration:
device {
name = nvtk0603:00-0603:f001
transform = 3
}
Wayland (udev)
For other Wayland compositors, create:
/etc/udev/rules.d/99-touchscreen.conf
ACTION=="add|change", KERNEL=="event[0-9]*", ATTRS{name}=="NVTK0603:00 0603:F001", ENV{LIBINPUT_CALIBRATION_MATRIX}="0 1 0 -1 0 1"
Then reload udev rules.
Xorg
Install xf86-input-wacom and create /etc/X11/xorg.conf.d/99-touchscreen.conf:
Section "InputClass"
Identifier "GPD Pocket 4 Touchscreen"
Driver "wacom"
MatchProduct "NVTK0603"
Option "TransformationMatrix" "0 1 0 -1 0 1 0 0 1"
EndSection
Automatic rotation
The GPD Pocket 4 has an accelerometer (MXC6655) that can be used for automatic screen rotation in tablet mode, see Tablet PC#Automatic rotation.
Reported mappings, given as monitor-sensor orientation to Hyprland transform:
| Variant | Laptop mode reports | normal | left-up | right-up | bottom-up |
|---|---|---|---|---|---|
| HX 370 | normal |
3 | 0 | 2 | 1 |
| 8840U | right-up |
0 | 1 | 3 | 2 |
On the 8840U the table is rotated 90° relative to the HX 370: laptop position reports right-up, not normal.
To determine yours, run monitor-sensor (from iio-sensor-proxy) and hold the machine in each of the four orientations, noting which label is reported when the screen is upright.
Touchscreen gestures
For touch gestures (swipe to switch workspaces, etc.), install lisgdAUR from the AUR.
Create a gesture script (e.g., ~/.config/hypr/scripts/touchscreen-gestures.sh):
#!/bin/bash
# GPD Pocket 4 touchscreen gestures using lisgd
# Accepts orientation parameter: 0, 1, 2, 3 (matches Hyprland transform)
if [ -z "$CALLED_FROM_AUTOROTATE" ]; then
pkill -f "lisgd" 2>/dev/null
sleep 0.3
fi
DEVICE="/dev/input/event10" # Adjust if needed
TRANSFORM="${1:-3}" # Default to laptop mode (transform 3)
# Commands - customize as needed
WS_PREV="hyprctl dispatch workspace e-1"
WS_NEXT="hyprctl dispatch workspace e+1"
OVERVIEW="hyprctl dispatch overview:toggle"
# Map Hyprland transform to lisgd orientation (-o flag)
case "$TRANSFORM" in
3) LISGD_ORIENT=0 ;; # Laptop mode
0) LISGD_ORIENT=1 ;; # Portrait left
1) LISGD_ORIENT=2 ;; # Laptop upside down
2) LISGD_ORIENT=3 ;; # Portrait right
esac
lisgd -d "$DEVICE" -o "$LISGD_ORIENT" \
-g "3,LR,*,0.08,$WS_PREV" \
-g "3,RL,*,0.08,$WS_NEXT" \
-g "3,UD,*,0.08,$OVERVIEW" \
-g "3,DU,*,0.08,$OVERVIEW" \
-t 150 -r 25 &
-o flag enables rotation-aware gestures. The DEVICE path may vary; check /dev/input/ for your touchscreen device.Add to Hyprland startup:
exec-once = ~/.config/hypr/scripts/touchscreen-gestures.sh
To integrate with auto-rotation, modify the auto-rotation script to restart the gesture script with the new orientation when rotation changes. See the auto-rotation section for details.
Backlight
The backlight is controlled via /sys/class/backlight/amdgpu_bl1/.
Install brightnessctl for easy control:
$ brightnessctl s 5%+ # increase $ brightnessctl s 5%- # decrease
Function keys
| Key | Visible?1 | Marked?2 | Effect |
|---|---|---|---|
Fn+Insert |
Yes | Yes |
XF86MonBrightnessUp
|
Fn+PrintSc |
Yes | Yes |
XF86MonBrightnessDown
|
Fn+[ |
Yes | Yes |
XF86AudioMute
|
Fn+] |
Yes | Yes |
XF86AudioLowerVolume
|
Fn+\ |
Yes | Yes |
XF86AudioRaiseVolume
|
Fn+Space |
No | Yes | Keyboard backlight toggle3 |
| Fn+= | No | Yes | Fan speed cycle3 |
- Visible to
wev,xev, and similar tools. - The key has a physical symbol describing its function.
- Controlled by keyboard/EC firmware, not configurable from the OS.
Touchpad
The GPD Pocket 4's pointing device (HAILUCK USB KEYBOARD Mouse) is detected by libinput as a basic pointer rather than a touchpad, which means standard touchpad gesture tools like libinput-gestures will not work.
$ libinput list-devices | grep -A5 "HAILUCK.*Mouse" Capabilities: pointer Tap-to-click: n/a Scroll methods: button
For swipe gestures, use the touchscreen gesture solution above instead.
Fingerprint reader
The FocalTech reader (2808:0752) is not supported by upstream libfprint: its focaltech_moc driver has a hardcoded product ID allowlist that does not include 0752, so fprintd-list reports No devices available even though the device enumerates correctly.
It does work with the proprietary FocalTech TOD driver packaged as libfprint-ft9201AUR, which conflicts with and replaces libfprint.
pacman -S libfprint if needed.After installing, enrol and then verify — enrolment succeeding does not prove that matching works:
$ fprintd-enroll $ fprintd-verify
Fingerprint stops working after suspend
fprintd normally closes the reader before suspend using a systemd logind sleep-delay inhibitor. If it is D-Bus activated late in the suspend sequence — for example by a lock screen that runs as the machine is going to sleep — that inhibitor request fails:
fprintd: Failed to install a sleep delay inhibitor: org.freedesktop.login1.OperationInProgress
The reader is USB-reset on resume, leaving fprintd holding a stale handle. All subsequent authentication then fails immediately, and because pam_fprintd returns PAM_AUTHINFO_UNAVAIL without contacting the daemon, fprintd itself logs nothing. Diagnose with:
$ fprintd-verify failed to claim device: ... Open failed with error: The device has already been opened!
Work around it by stopping fprintd before sleep and starting it again afterwards, using two units enabled through sleep.target and suspend.target respectively. fprintd.service is Type=dbus, so it is reactivated on demand.
/etc/systemd/system-sleep/ hook is not a reliable alternative here, as the resume path can complete before a service restart finishes.Fan control
Since Linux 6.18 the in-tree gpd_fan hwmon driver supports this machine; its DMI table includes G1628-04-L. It exposes fan1_input, pwm1 and pwm1_enable under /sys/class/hwmon/.
pwm1_enable=0 means full speed, not off — inverted relative to the usual hwmon convention. 1 is manual and 2 is the automatic EC curve. In manual mode the driver has no temperature feedback and no ramp logic: the fan holds the value it was given regardless of temperature, so a userspace curve daemon that exits leaves the fan fixed. Do not run pwmconfig, which stops fans in order to correlate them.The firmware-level Fn+= speed cycle listed under #Function keys is a lower-risk starting point.
Power management
Only s2idle is available (/sys/power/mem_sleep); there is no S3. This is normal for current AMD platforms and works well. Measured on the 8840U variant across a 101-minute suspend on battery:
- 0.57 W average draw, roughly 1.3% per hour of the 45 Wh battery
- 96% hardware sleep residency, from
/sys/power/suspend_stats/last_hw_sleep
A residency below about 90% indicates the SoC is not reaching S0i3; see amd-debug-tools and its amd-s2idle tool to investigate.
Firmware
The devices fwupd can see are the UEFI dbx, the integrated camera, the NVMe SSD and the Microsoft UEFI CA certificates.
See also
- GPD Pocket 3 - Previous generation device
- Laptop - General laptop configuration
- Hyprland - Wayland compositor configuration
- Touchscreen - General touchscreen configuration