{"id":2325,"date":"2025-09-29T09:47:42","date_gmt":"2025-09-29T06:47:42","guid":{"rendered":"https:\/\/handheld.computer\/?page_id=2325"},"modified":"2025-09-30T01:21:34","modified_gmt":"2025-09-29T22:21:34","slug":"gentoo-on-a-gpd-pocket-3","status":"publish","type":"page","link":"https:\/\/handheld.computer\/?page_id=2325","title":{"rendered":"Gentoo on a GPD Pocket 3"},"content":{"rendered":"<h1>Introduction<\/h1>\n<p>The GPD Pocket 3 represents the third generation of GPD&#8217;s ultra-mobile PC (UMPC) series, featuring Intel Tiger Lake architecture and a unique convertible tablet design. This manual is intended to help users configure Gentoo distribution of the GNU\/Linux operating system for GPD Pocket 3 handheld computer.<\/p>\n<p>Unlike mainstream laptops, the GPD Pocket 3 presents specific challenges for Linux users: portrait-oriented display requiring rotation, specialized input devices including touchscreen and digitizer, and unique hardware components that require careful kernel configuration. This guide addresses these challenges with proven solutions tested on real hardware.<\/p>\n<p>It&#8217;s supposed that users are skilled enough to install bare system from stage, compile kernel from source code, apply patches, and have experience with Gentoo&#8217;s Portage system. Basic familiarity with X11 configuration and hardware troubleshooting is also recommended.<\/p>\n<p><strong>Hardware Compatibility:<\/strong> This guide has been tested with the Intel i3-1125G4 variant. Users with the Intel N6000 model may need to adapt certain configurations as noted throughout the document.<\/p>\n<p>This article and all information and products in it are provided on an &quot;as is&quot; basis, without warranty of any kind, either express or implied. <strong>Your use of this article is at your own risk.<\/strong><\/p>\n<h1>Content<\/h1>\n<ul>\n<li><a href=\"#hw-info\">Hardware info<\/a><\/li>\n<li><a href=\"#support-summary\">Linux support summary<\/a><\/li>\n<li><a href=\"#kernel\">Kernel<\/a><\/li>\n<li><a href=\"#input\">Input<\/a><\/li>\n<li><a href=\"#video\">Video<\/a><\/li>\n<li><a href=\"#sound\">Sound<\/a><\/li>\n<li><a href=\"#accelerometer\">Accelerometer<\/a><\/li>\n<li><a href=\"#net\">Networking<\/a><\/li>\n<li><a href=\"#acpi\">ACPI<\/a><\/li>\n<li><a href=\"#cpufreq\">CPU frequency scaling<\/a><\/li>\n<li><a href=\"#suspend\">Suspending<\/a><\/li>\n<li><a href=\"#webcam\">Web camera<\/a><\/li>\n<li><a href=\"#issues\">Known issues<\/a><\/li>\n<li><a href=\"#benchmark\">Benchmarks<\/a><\/li>\n<li><a href=\"#history\">History of changes<\/a><\/li>\n<\/ul>\n<h1 id=\"hw-info\">Hardware info<\/h1>\n<p>Brief hardware description from the manufacturer: <a href=\"https:\/\/gpd.hk\/gpdpocket31125g4\">GPD Pocket 3<\/a> (<a href=\"https:\/\/vminko.org\/storage\/pocket3\/specs\/GPD_Pocket_3_i3-1125G4.html\">local backup<\/a> of the page).<\/p>\n<table>\n<thead>\n<tr>\n<th>Type<\/th>\n<th>Name<\/th>\n<th>\n<div style=\"width:490px\">Technical info<\/div>\n<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>CPU<\/td>\n<td>Intel\u00ae Core\u2122 i3-1125G4 (Tiger Lake)<\/td>\n<td>Base frequency: 0,9GHz@12W, 2.0Ghz@28W; Max frequency: 3.7GHz\/1 core, 3.3Ghz\/all cores; 4 cores, 8 threads; TDP: 12-28W; Features: x86-64, SSE4.2, AVX512, AES, IVT; L2 cache: 8MB. <a href=\"#ref\">[1]<\/a>, <a href=\"#ref\">[2]<\/a>, <a href=\"#ref\">[3]<\/a><\/td>\n<\/tr>\n<tr>\n<td>RAM<\/td>\n<td>Micron Technology<\/td>\n<td>16GB dual channel, LPDDR4X-4267<\/td>\n<\/tr>\n<tr>\n<td>Video<\/td>\n<td>Intel UHD Graphics G4 (Tiger Lake)<\/td>\n<td>EU: 48, Clock speed: 0.4-1.25Ghz; 600-1100 GFLOPS; OpenGL support: 4.6; Multimedia codecs (decode) <a href=\"#ref\">[4]<\/a> : MPEG-2, MPEG-4 AVC, VC-1 \/ WMV9, HEVC, VP9, AV-1, JPEG. Device id: 8086:9a78 (rev 01); <a href=\"#ref\">[5]<\/a>, <a href=\"#ref\">[6]<\/a><\/td>\n<\/tr>\n<tr>\n<td>Storage device<\/td>\n<td>Custom: WD Black SN850X M.2 NVME SSD<\/td>\n<td>Capacity: 2TB; Seq. R\/W speed: 2.6\/3.4 GB\/s;<\/td>\n<\/tr>\n<tr>\n<td>Audio<\/td>\n<td>Realtek Semiconductor Co. ALC269VC<\/td>\n<td>4 channels, 24-bit I\/O; DAC max sample rate: 192kHz; EAX 1.0 &amp; 2.0, Direct Sound 3D, A3D; Device id: 8086:a0c8 <a href=\"#ref\">[7]<\/a><\/td>\n<\/tr>\n<tr>\n<td>Ethernet<\/td>\n<td>Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller<\/td>\n<td>Speed: 10M\/100M\/1Gbps\/2.5Gbps; Device id: 10ec:8125 (rev 05); <a href=\"#ref\">[8]<\/a><\/td>\n<\/tr>\n<tr>\n<td>WiFi &amp; Bluetooth<\/td>\n<td>Intel\u00ae Wi-Fi 6E AX210<\/td>\n<td>Bands: 2.4, 5, 6GHz; Protocols: 802.11ax; Max speed: 2.4 Gbps; Bluetooth Version 5.3; PCI Device id: 8086:2725 (rev 1a); USB Device id: 8087:0032; <a href=\"#ref\">[9]<\/a><\/td>\n<\/tr>\n<tr>\n<td>Web camera<\/td>\n<td>Alcor Micro Corp. USB 2.0 Camera<\/td>\n<td>Maximum resolution of 1600&#215;1200 at 30fps; Device id: 058f:5608;<\/td>\n<\/tr>\n<tr>\n<td>Accelerometer<\/td>\n<td>Memsic MXC4005XC 3-Axis Accelerometer<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>Keyboard &amp; touchpad<\/td>\n<td>HAILUCK CO.,LTD USB KEYBOARD Mouse<\/td>\n<td>Device id: 258a:000c<\/td>\n<\/tr>\n<tr>\n<td>Touchscreen &amp; digitizer<\/td>\n<td>Goodix GXTP7380<\/td>\n<td>Device id: 27c6:0113, compatible with Microsoft Surface Pen<\/td>\n<\/tr>\n<tr>\n<td>Fingerprint reader<\/td>\n<td>Focaltech FTE3600<\/td>\n<td>Connected via SPI bus<\/td>\n<\/tr>\n<tr>\n<td>Thunderbolt 4<\/td>\n<td>Intel Corporation Tiger Lake-LP Thunderbolt 4 USB Controller<\/td>\n<td>Device id: 8086:9a13;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3 id=\"ref\">References<\/h3>\n<ol>\n<li><a href=\"https:\/\/www.intel.com\/content\/www\/us\/en\/products\/sku\/208656\/intel-core-i31125g4-processor-8m-cache-up-to-3-70-ghz\/specifications.html\">Intel\u00ae Core\u2122 i3-1125G4 Processor<\/a><\/li>\n<li><a href=\"https:\/\/vminko.org\/storage\/p3\/specs\/Tiger%20Lake%20-%20Wikipedia%20(2025-08-13%2004%ef%bc%9a05%ef%bc%9a57).html\">Tiger Lake &#8211; Wikipedia<\/a><\/li>\n<li><a href=\"https:\/\/vminko.org\/storage\/p3\/specs\/Intel%20Core%20i3-1125G4%20Processor%20-%20Benchmarks%20and%20Specs%20-%20NotebookCheck.net%20Tech%20(2025-08-13%2004%ef%bc%9a13%ef%bc%9a05).html\">Intel Core i3-1125G4 Processor &#8211; Benchmarks and Specs &#8211; NotebookCheck.net Tech<\/a><\/li>\n<li><a href=\"https:\/\/vminko.org\/storage\/p3\/specs\/Intel%20Graphics%20Technology%20-%20Wikipedia%20(2025-08-13%2004%ef%bc%9a00%ef%bc%9a40).html\">Intel Graphics Technology &#8211; Wikipedia<\/a><\/li>\n<li><a href=\"https:\/\/vminko.org\/storage\/p3\/specs\/List%20of%20Intel%20graphics%20processing%20units%20-%20Wikipedia%20(2025-08-13%2004%ef%bc%9a01%ef%bc%9a10).html\">List of Intel graphics processing units &#8211; Wikipedia<\/a><\/li>\n<li><a href=\"https:\/\/vminko.org\/storage\/p3\/specs\/Intel%20Tiger%20Lake-U%20Xe%20Graphics%20G4%2048%20EUs%20GPU%20-%20Benchmarks%20and%20Specs%20-%20NotebookCheck.net%20Tech%20(2025-08-13%2004%ef%bc%9a21%ef%bc%9a06).html\">Intel Tiger Lake-U Xe Graphics G4 48 EUs GPU &#8211; Benchmarks and Specs &#8211; NotebookCheck.net Tech<\/a><\/li>\n<li><a href=\"https:\/\/vminko.org\/storage\/p3\/specs\/alc269.pdf\">ALC269 HIGH DEFINITION AUDIO CODEC WITHE MBEDDED CLASS-D SPEAKER AMPLIFIER DATASHEET<\/a><\/li>\n<li><a href=\"https:\/\/vminko.org\/storage\/p3\/specs\/r8125.pdf\">RTL8168 INTEGRATED GIGABIT ETHERNET CONTROLLER FOR PCI EXPRESS APPLICATIONS DATASHEET<\/a><\/li>\n<li><a href=\"https:\/\/vminko.org\/storage\/p3\/specs\/Intel%c2%ae%20Wi-Fi%206E%20AX210%20(2025-08-13%2004%ef%bc%9a11%ef%bc%9a48).html\">Intel\u00ae Wi-Fi 6E AX210<\/a><\/li>\n<\/ol>\n<h2>Logs<\/h2>\n<ul>\n<li><a href=\"http:\/\/vminko.org\/storage\/p3\/logs\/dmesg.txt\">dmesg<\/a><\/li>\n<li><a href=\"http:\/\/vminko.org\/storage\/p3\/logs\/lspci.txt\">lspci -v<\/a><\/li>\n<li><a href=\"http:\/\/vminko.org\/storage\/p3\/logs\/lsusb.txt\">lsusb -v<\/a><\/li>\n<li><a href=\"http:\/\/vminko.org\/storage\/p3\/logs\/smartctl.txt\">smartctl -a \/dev\/sda<\/a><\/li>\n<li><a href=\"http:\/\/vminko.org\/storage\/p3\/logs\/cpuinfo.txt\">cat \/proc\/cpuinfo<\/a><\/li>\n<li><a href=\"https:\/\/vminko.org\/storage\/p3\/logs\/glxinfo.txt\">glxinfo<\/a><\/li>\n<li><a href=\"https:\/\/vminko.org\/storage\/p3\/logs\/vainfo.txt\">vainfo<\/a><\/li>\n<\/ul>\n<h1 id=\"support-summary\">Linux support summary<\/h1>\n<table>\n<thead>\n<tr>\n<th>Subsystem<\/th>\n<th>Feature<\/th>\n<th style=\"text-align: center;\">Status<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><em>Input<\/em><\/td>\n<td>Keyboard<\/td>\n<td style=\"text-align: center;\">Works perfectly<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>Optical pointer<\/td>\n<td style=\"text-align: center;\">Works perfectly<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>Touchscreen<\/td>\n<td style=\"text-align: center;\">Works perfectly<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>Digitizer<\/td>\n<td style=\"text-align: center;\">Works perfectly<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>Digitizer pen buttons<\/td>\n<td style=\"text-align: center;\">Works perfectly<\/td>\n<\/tr>\n<tr>\n<td><em>Video<\/em><\/td>\n<td>Integrated display<\/td>\n<td style=\"text-align: center;\">Works perfectly<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>2D graphics<\/td>\n<td style=\"text-align: center;\">Works perfectly<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>3D acceleration<\/td>\n<td style=\"text-align: center;\">Works perfectly<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>Video decoding acceleration<\/td>\n<td style=\"text-align: center;\">Works perfectly<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>HDMI output<\/td>\n<td style=\"text-align: center;\"><strong>Minor issues<\/strong><\/td>\n<\/tr>\n<tr>\n<td><em>Audio<\/em><\/td>\n<td>Internal speaker<\/td>\n<td style=\"text-align: center;\">Works perfectly<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>Microphone<\/td>\n<td style=\"text-align: center;\">Works perfectly<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>Audio out jack<\/td>\n<td style=\"text-align: center;\">Works perfectly<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>Headphones mute speaker<\/td>\n<td style=\"text-align: center;\">Works perfectly<\/td>\n<\/tr>\n<tr>\n<td><em>Networking<\/em><\/td>\n<td>Ethernet<\/td>\n<td style=\"text-align: center;\">Works perfectly<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>WiFi<\/td>\n<td style=\"text-align: center;\">Works perfectly<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>Bluetooth<\/td>\n<td style=\"text-align: center;\"><strong>Untested<\/strong><\/td>\n<\/tr>\n<tr>\n<td><em>ACPI<\/em><\/td>\n<td>Lid button<\/td>\n<td style=\"text-align: center;\">Works perfectly<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>Power button<\/td>\n<td style=\"text-align: center;\">Works perfectly<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>Brightness control<\/td>\n<td style=\"text-align: center;\">Works perfectly<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>AC and battery<\/td>\n<td style=\"text-align: center;\">Works perfectly<\/td>\n<\/tr>\n<tr>\n<td><em>Power management<\/em><\/td>\n<td>Suspend to RAM<\/td>\n<td style=\"text-align: center;\">Works perfectly<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>Suspend to disk<\/td>\n<td style=\"text-align: center;\">Works perfectly<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>CPU frequency scaling<\/td>\n<td style=\"text-align: center;\">Works perfectly<\/td>\n<\/tr>\n<tr>\n<td><em>Other<\/em><\/td>\n<td>Web camera<\/td>\n<td style=\"text-align: center;\">Works perfectly<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>Fingerprint reader<\/td>\n<td style=\"text-align: center;\"><strong>Not supported<\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h1 id=\"kernel\">Kernel<\/h1>\n<p>The kernel config for version 6.15.4 is available <a href=\"https:\/\/vminko.org\/storage\/pocket3\/configs\/usr\/src\/linux\/config-6.15.4\">here<\/a>. Few notes regarding the kernel config:<\/p>\n<ul>\n<li>It&#8217;s optimized for GPD Pocket 3 (i3-1125G4). Most options not required by this device are turned off. The total number of enabled options is 1450, the size of the compiles binary image is 12M. You may need to enable additional options like filesystems or drivers for peripheral devices. <\/li>\n<li>This config produces monolith kernel, which does not require any modules, firmwares or even a command line. But prior building this kernel you need install the firmware files, which are provided by these two packages:\n<ul>\n<li><code>sys-kernel\/linux-firmware<\/code>. In order to install only the firmware files which are relevant for GPD Pocket 3, enable these two USE flags: <code>redistributable savedconfig<\/code> and save <a href=\"https:\/\/vminko.org\/storage\/pocket3\/configs\/etc\/portage\/savedconfig\/sys-kernel\/linux-firmware\/linux-firmware.conf\">this<\/a> file as <code>\/etc\/portage\/savedconfig\/sys-kernel\/linux-firmware\/linux-firmware.conf<\/code><\/li>\n<li><code>net-wireless\/wireless-regdb<\/code><\/li>\n<\/ul>\n<\/li>\n<li>Mitigation of <a href=\"https:\/\/wiki.gentoo.org\/wiki\/Project:Security\/Vulnerabilities\/Meltdown_and_Spectre\">Spectre and Meltdown<\/a> vulnerabilities is disabled (<code>CONFIG_PAGE_TABLE_ISOLATION<\/code>). Consider for yourself what is more important for you: performance of security.<\/li>\n<li>This config assumes that nvme0n1p5 is the root partition and nvme0n1p4 is the swap partition. If your partition layout is different, you will need to edit these parameters:\n<ul>\n<li><code>CONFIG_CMDLINE=&quot;root=\/dev\/nvme0n1p5 fbcon=rotate:1 video=DSI-1:panel_orientation=right_side_up quiet i915.enable_guc=3&quot;<\/code><\/li>\n<li><code>CONFIG_PM_STD_PARTITION=&quot;\/dev\/nvme0n1p4&quot;<\/code><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Please note that systems equipped with the Intel N6000 processor require a tailored kernel configuration and specific firmware binaries: install the appropriate Intel N6000 microcode package (e.g., intel-microcode for N6000), and adjust the P-State driver settings to match the lower-power P-Core performance characteristics, etc.<\/p>\n<p><strong>Kernel Version Recommendation<\/strong><\/p>\n<p>Users running kernels older than 6.15.4 have reported the following issues, all resolved in 6.15.4 and later releases:<\/p>\n<ol>\n<li>\n<p><em>X11 video stability<\/em> &#8211; Xorg server crashes in applications when 3D acceleration is enabled, while disabling 3D results in unacceptably slow performance on Tiger Lake platforms. In order for the video subsystem to work stably and with full functionality in the X server, a recent xe driver is required (as described in the <a href=\"#video\">Video<\/a> section)<\/p>\n<\/li>\n<li>\n<p><em>PCIe DMA timeouts<\/em> &#8211; Problems on the Realtek RTL8125 Ethernet controller <a href=\"https:\/\/lore.kernel.org\/linux-netdev\/20220101-fix-rtl8125-timeout\/\">1<\/a>.<\/p>\n<\/li>\n<li>\n<p><em>Suspend\/resume hangs<\/em>  Erratic behavior causing hangs during S3 entry <a href=\"https:\/\/bugzilla.kernel.org\/show_bug.cgi?id=213456\">2<\/a>.<\/p>\n<\/li>\n<li>\n<p><em>SOF audio routing<\/em>  Incomplete sound routing with ALC269 codecs under SOF, resulting in no audio output <a href=\"https:\/\/github.com\/thesofproject\/linux\/issues\/3393\">3<\/a>.<\/p>\n<\/li>\n<\/ol>\n<p>Therefore it is <em>strongly<\/em> recommended to build and install kernel version 6.15.4 or newer to ensure full hardware compatibility.<\/p>\n<h2>Booting the kernel<\/h2>\n<p>Since the described kernel does not require a command line, you can boot it directly from the EFI firmware. You no longer need to install and configure a bootloader.<\/p>\n<pre><code>mount \/dev\/nvme0n1p1 \/mnt\/boot\ncp arch\/x86_64\/boot\/bzImage \/mnt\/boot\/EFI\/Boot\/bootx64.efi\numount \/mnt\/boot\nefibootmgr -c -d \/dev\/nvme0n1 -p1 -L 'Gentoo' -l '\\EFI\\Boot\\bootx64.efi'<\/code><\/pre>\n<p>After that you can make Gentoo the default boot option via editing BIOS setting <code>Boot -&gt; Boot Option Priorities<\/code>.<\/p>\n<h1 id=\"input\">Input<\/h1>\n<p>There are various xorg input device drivers. libinput is one of them, and it&#8217;s the default driver in Gentoo. This driver works fine with GPD Pocket 3.<\/p>\n<p>In order to use this driver, add &#8216;libinput&#8217; to the <code>INPUT_DEVICES<\/code> variable, see <a href=\"https:\/\/vminko.org\/storage\/pocket3\/configs\/etc\/portage\/make.conf\">make.conf<\/a> as example.<\/p>\n<h2>Keyboard<\/h2>\n<p>Down below you can see xorg.conf.d file for the keyboard.<\/p>\n<p><a href=\"https:\/\/vminko.org\/storage\/pocket3\/configs\/etc\/X11\/xorg.conf.d\/10keyboard.conf\">10keyboard.conf<\/a><\/p>\n<pre><code>    Section \"InputClass\"\n        Identifier          \"keyboard-all\"\n        Driver              \"libinput\"\n        Option              \"XkbRules\"                  \"evdev\"\n        Option              \"XkbModel\"                  \"pc105\"\n        Option              \"XkbLayout\"                 \"us,ru\"\n        Option              \"XkbVariant\"                \",winkeys\"\n        Option              \"XkbOptions\"                \"grp:alt_shift_toggle,terminate:ctrl_alt_bksp\"\n        MatchIsKeyboard     \"on\"\n        MatchDevicePath     \"\/dev\/input\/event*\"\n    EndSection<\/code><\/pre>\n<p><strong>Fn+Printsc<\/strong> and <strong>Fn+Insert<\/strong> by default generate correct key symbol for display brightness control:  <code>XF86MonBrightnessUp<\/code> and <code>XF86MonBrightnessDown<\/code>;<br \/>\n<strong>Fn+[<\/strong>, <strong>Fn+]<\/strong> and <strong>Fn+\\<\/strong> \u0433 generate standard key symbols for audio control: <code>XF86AudioRaiseVolume<\/code>, <code>XF86AudioLowerVolume<\/code> and <code>XF86AudioMute<\/code>;<\/p>\n<p>All we need to do is to assign proper actions to the symnames. The <a href=\"https:\/\/vminko.org\/storage\/pocket3\/configs\/home\/user\/.config\/openbox\/rc.xml\">rc.xml<\/a> is an example of such bindings. This configuration file has some additional key binding, which you may find interesting:<\/p>\n<p><strong>Alt+d<\/strong>&#8211; Toggles DPMS state of connected displays via xset.  See <a href=\"https:\/\/vminko.org\/storage\/pocket3\/configs\/usr\/local\/bin\/dpms.sh\">dpms.sh<\/a> for details.<br \/>\nThe <strong>Power<\/strong> button generates <code>XF86PowerOff<\/code> as expected. This key code is assigned to show an information dialog (<a href=\"https:\/\/vminko.org\/storage\/pocket3\/configs\/usr\/local\/bin\/tray.sh\">tray.sh<\/a>), which contains current time and date, battery status and level, brightness, CPU frequencies and governors, etc.<\/p>\n<pre><code>            13.08 Wednesday 13:11\n\n    Paused: 01-5 Jahre (Single Version).mp3\n    Battery: Discharging, 75%, 07:10:58 remaining\n    Brightness: 25\n    Temp: CPU 36|33|37|33\u00b0C, SSD 37\u00b0C, Eth 37\u00b0C\n    Freq: 3.17GHz|2.92GHz|3.07GHz|2.71GHz, powersave\n    RAM: 76% free\n    Network: eth0 wlan0, wireless is on<\/code><\/pre>\n<p><strong>Fn+-<\/strong> generates the <code>Menu<\/code> key symbol.<br \/>\n<strong>Fn+=<\/strong> is the <em>fan switch<\/em>. It is 100% hardware and does not generate a scancode, ACPI or udev event.<br \/>\n<strong>Fn+space<\/strong> enables\/disables keyboard backlight. It is also 100% hardware and does not require any software configurations.<br \/>\n<strong>Del<\/strong> key during boot enters BIOS setup.<br \/>\n<strong>Fn+6<\/strong> (or <strong>F7<\/strong>) during boot opens boot device selection menu.<\/p>\n<h2>Touchscreen<\/h2>\n<p>Down below you can see xorg.conf.d file for the touchscreen.<\/p>\n<p><a href=\"https:\/\/vminko.org\/storage\/pocket3\/configs\/etc\/X11\/xorg.conf.d\/22touchscreen.conf\">22touchscreen.conf<\/a><\/p>\n<pre><code>    Section \"InputClass\"\n      Identifier    \"calibration\"\n      Driver        \"wacom\"\n      MatchProduct  \"GXTP7380\"\n      Option        \"TransformationMatrix\" \"0 1 0 -1 0 1 0 0 1\"\n      Option        \"Button2\" \"3\"\n    EndSection<\/code><\/pre>\n<p>If you want to change the touchscreen orientation automatically, see the <a href=\"#accelerometer\">Accelerometer<\/a> section.<\/p>\n<h2>Digitizer &amp; Stylus<\/h2>\n<p>The digitizer GXTP7380 works out of the box with the kernel version 6.15.4 and the wacom X11 input driver. Down below you can see xorg.conf.d file for the digitizer.<\/p>\n<p><a href=\"https:\/\/vminko.org\/storage\/pocket3\/configs\/etc\/X11\/xorg.conf.d\/22pen.conf\">23pen.conf<\/a><\/p>\n<pre><code>    Section \"InputClass\"\n      Identifier \"Wacom N-Trig class\"\n      MatchProduct \"HID 1b96:0001|N-Trig Pen|N-Trig DuoSense|27C6:0113\"\n      MatchDevicePath \"\/dev\/input\/event*\"\n      Driver \"wacom\"\n      Option \"Button2\" \"3\"\n    EndSection<\/code><\/pre>\n<p>Pressure sensitivity also works fine as demonstrated on the screenshot below.<br \/>\n<a href=\"\/wp-content\/uploads\/2025\/09\/Xournal.png\" data-rel=\"lightbox-gallery-X7Avvf16\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/09\/Xournal.png\" alt=\"\" \/><\/a><\/p>\n<h2 id=\"virtkbd\">Virtual keyboard<\/h2>\n<p>I case you want to use a virtual keyboard, consider <em>matchbox-keyboard<\/em>.<\/p>\n<p>The custom ebuild with the lastest version of the program is available here: <a href=\"https:\/\/vminko.org\/storage\/pocket3\/configs\/usr\/local\/portage\/x11-misc\/matchbox-keyboard\/matchbox-keyboard-999999.ebuild\">matchbox-keyboard-999999.ebuild<\/a>.<br \/>\nI use a custom keyboard layout. which is displayed on the screenshot below. The layout config file is here: <a href=\"https:\/\/vminko.org\/storage\/pocket3\/configs\/usr\/share\/matchbox-keyboard\/keyboard.xml\">keyboard.xml<\/a>.<br \/>\nThis keyboard works best with special settings of windows manager. In case you use <em>OpenBox<\/em> I recommend the following settings:<\/p>\n<pre><code>&lt;applications&gt;\n  &lt;application class=&quot;matchbox-keyboard&quot;&gt;\n    &lt;decor&gt;yes&lt;\/decor&gt;\n    &lt;layer&gt;above&lt;\/layer&gt;\n    &lt;position&gt;\n      &lt;x&gt;center&lt;\/x&gt;\n      &lt;y&gt;-0%&lt;\/y&gt;\n    &lt;\/position&gt;\n    &lt;size&gt;\n      &lt;height&gt;30%&lt;\/height&gt;\n      &lt;width&gt;100%&lt;\/width&gt;\n    &lt;\/size&gt;\n    &lt;skip_pager&gt;no&lt;\/skip_pager&gt;\n    &lt;skip_taskbar&gt;no&lt;\/skip_taskbar&gt;\n  &lt;\/application&gt;\n&lt;\/applications&gt;<\/code><\/pre>\n<p>A desktop panel is very useful when the hardware keyboard is hidded. For example, it can be used to toggle the virtual keyboard. It looks like the device does not include a sensor to detect that the device is converted into tablet mode (please let me know if I&#8217;m wrong). Therefore I configured the autorotation script to launch the desktop panel (I prefer <em>lxpanel<\/em>) when the device is rotated. See the <a href=\"#accelerometer\">Accelerometer<\/a> section for details.<\/p>\n<p><a href=\"https:\/\/vminko.org\/storage\/pocket3\/configs\/home\/user\/.config\/lxpanel\/default\/panels\/panel\">Here<\/a> is my config file for lxpanel. And here is the script I use to toggle the virtual keyboard: <a href=\"https:\/\/vminko.org\/storage\/pocket3\/configs\/usr\/local\/bin\/toggle_keyboard.sh\">toggle_keyboard.sh<\/a>.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2025\/09\/Keyboard.png\" data-rel=\"lightbox-gallery-X7Avvf16\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/09\/Keyboard.png\" alt=\"\" \/><\/a><\/p>\n<h1 id=\"video\">Video<\/h1>\n<h2>Kernel<\/h2>\n<p>The native orientation of the integrated display is portrait. Therefore the framebuffer console needs to be rotated. In order to configure correct orientation, add &#8216;fbcon=rotate:3&#8217; to the kernel command line:<\/p>\n<pre><code>    CONFIG_CMDLINE=\"root=\/dev\/nvme0n1p5 fbcon=rotate:1 video=DSI-1:panel_orientation=right_side_up quiet i915.enable_guc=3\"<\/code><\/pre>\n<h2>X11 configuration<\/h2>\n<p>The <code>VIDEO_CARDS<\/code> variable should be set to &#8216;intel&#8217;. The global <code>USE<\/code> should include &#8216;dri&#8217;, see <a href=\"https:\/\/vminko.org\/storage\/pocket3\/configs\/etc\/portage\/make.conf\">make.conf<\/a> as example.<\/p>\n<p>The modesetting driver (which is built into xorg-server) works fine, therefore it&#8217;s safe to get rid of the old xf86-video-intel driver.  Down below you can see xorg.conf.d files for the UHD graphics.<\/p>\n<p><a href=\"https:\/\/vminko.org\/storage\/pocket3\/configs\/etc\/X11\/xorg.conf.d\/30device.conf\">30device.conf<\/a><\/p>\n<pre><code>    Section \"Device\"\n      Identifier    \"Intel Graphics\"\n      Driver        \"modesetting\"\n    EndSection<\/code><\/pre>\n<p><a href=\"https:\/\/vminko.org\/storage\/pocket3\/configs\/etc\/X11\/xorg.conf.d\/40monitor.conf\">40monitor.conf<\/a><\/p>\n<pre><code>    Section \"Monitor\"\n      Identifier    \"DSI-1\"\n      Option        \"Rotate\"                 \"right\"\n      Option        \"Primary\"                \"true\"\n    EndSection\n\n    Section \"Monitor\"\n      Identifier    \"HDMI1\"\n      Option        \"Disable\"                \"true\"\n    EndSection\n\n    Section \"Monitor\"\n      Identifier    \"DP-1\"\n      Option        \"Disable\"                \"true\"\n    EndSection\n\n    Section \"ServerFlags\"\n      Option \"StandbyTime\" \"5\"\n    EndSection<\/code><\/pre>\n<h2>DPI &amp; scaling<\/h2>\n<p>It&#8217;s very easy to set correct DPI for the built-in display. Just add the following line to your <a href=\"https:\/\/vminko.org\/storage\/pocket3\/configs\/home\/user\/.Xdefaults\"><code>~\/.Xdefaults<\/code><\/a>:<\/p>\n<pre><code>    Xft.dpi: 144<\/code><\/pre>\n<p>However, this option will affect all displays connected to the device. If you use an external display, you may want to set different DPI.<br \/>\nOne way to solve this issue is to use <code>xrandr<\/code> with the <code>--scale<\/code> option, for example:<\/p>\n<pre><code>    xrandr --output DSI-1 --scale 0.666667x0.666667<\/code><\/pre>\n<p>However, this will make the image a bit blurry. Please let me know if there is a way to set different DPI without blurring the image.<\/p>\n<p>Here is a nice wrapup of the current X Server capabilities of handling mixed DPI: <a href=\"http:\/\/wok.oblomov.eu\/tecnologia\/mixed-dpi-x11\/\">Mixed DPI and the X Window System<\/a>.<\/p>\n<h2>Backlight<\/h2>\n<p><code>xbacklight currently<\/code> does not work with the modesetting driver <a href=\"https:\/\/gitlab.freedesktop.org\/xorg\/xserver\/-\/issues\/47\">issue #47<\/a>. The project <a href=\"https:\/\/gitlab.com\/wavexx\/acpilight\">acpilight<\/a> provides a xbacklight drop in replacement which addresses the issue. In Gentoo this tool is provided by <code>sys-power\/acpilight<\/code>.<\/p>\n<p>Normally, users are prohibited to alter files in the sys filesystem. It&#8217;s advisable (and recommended) to setup an &quot;udev&quot; rule to allow users in the &quot;video&quot; group to set the display brightness. To do so, place a file in <a href=\"https:\/\/vminko.org\/storage\/pocket3\/configs\/etc\/udev\/rules.d\/90-backlight.rules\">\/etc\/udev\/rules.d\/90-backlight.rules<\/a> containing:<\/p>\n<pre><code>    SUBSYSTEM==\"backlight\", ACTION==\"add\", \\\n      RUN+=\"\/bin\/chgrp video \/sys\/class\/backlight\/%k\/brightness\", \\\n      RUN+=\"\/bin\/chmod g+w \/sys\/class\/backlight\/%k\/brightness\"<\/code><\/pre>\n<p>to setup the relevant permissions at boot time. These rules are very conservative: only the display brightness can be controlled, and nothing else. Do not set suid permissions on xbacklight.<\/p>\n<h2>HDMI output<\/h2>\n<p>HDMI output is supported by intel driver. You can use <a href=\"https:\/\/vminko.org\/storage\/pocket3\/configs\/usr\/local\/bin\/video-out.sh\">video-out.sh<\/a> utility to toggle the HDMI output (via xrandr).  The utility installs the external screen to the right of built-in screen. See the source code of <code>video-out.sh<\/code> for details.<\/p>\n<h2>3D acceleration<\/h2>\n<p>There are two available drivers: xf86-video-intel (obsolete driver) and the modesetting driver built into xorg-server (recommended).<br \/>\nThe first one is significantly faster. glxgears shows approximately 5000 FPS using xf86-video-intel vs 3800 FPS using the modesetting driver.<br \/>\nHowever, xf86-video-intel is not recommeded by Gentoo commutiny, because this driver is obsolete and is no longer maintained by Intel. If you decide to use xf86-video-intel, you will need to update the X11 output name in xorg configuration files and the scripts like <a href=\"https:\/\/vminko.org\/storage\/pocket3\/configs\/usr\/local\/bin\/video-out.sh\">video-out.sh<\/a>. xf86-video-intel provides eDP1, DP1, etc., while the modesetting drivers provides eDP-1, DP-1, etc. for the same outputs.<\/p>\n<p>DRI works fine with default parameters.<\/p>\n<p>The current modesetting driver from xf86-video-intel-1.20.11 with mesa-20.3.5 supports OpenGL-4.6. See <a href=\"https:\/\/vminko.org\/storage\/pocket3\/logs\/glxinfo.txt\">glxinfo<\/a> for details.<\/p>\n<h2>Video decoding acceleration<\/h2>\n<p>Intel UHD Graphics Xe G4 is able to decode a wide range of multimedia codecs <a href=\"#ref\">[4]<\/a>. The config parameters below describe how to enable hardware decoding via VA-API.<\/p>\n<p>The <a href=\"https:\/\/vminko.org\/storage\/pocket3\/configs\/etc\/portage\/make.conf\">global<\/a> <code>USE<\/code> should include &#8216;vaapi&#8217;.<\/p>\n<p>Custom USE flags:<\/p>\n<pre><code>    x11-libs\/libva drm utils\n    media-video\/libva-utils drm vainfo\n    x11-libs\/libva-intel-media-driver set-as-default<\/code><\/pre>\n<p>Unmask the following packages:<\/p>\n<pre><code>    x11-libs\/libva ~amd64\n    x11-libs\/libva-intel-driver ~amd64\n    media-video\/libva-utils ~amd64<\/code><\/pre>\n<p>Besides libva, you need a media player, which supports VA-API. You can use &#8216;mpv&#8217;, which does the job fine (except 4k ,see detail below). In this case, add the following config parameters to your <a href=\"https:\/\/vminko.org\/storage\/pocket3\/configs\/home\/user\/.config\/mpv\/mpv.conf\">mpv.conf<\/a><\/p>\n<pre><code>    vo=vaapi\n    hwdec=vaapi-copy<\/code><\/pre>\n<p>You can check if hardware is configured properly by analyzing mpv output:<\/p>\n<pre><code>    Resuming playback. This behavior can be disabled with --no-resume-playback.\n     (+) Video --vid=1 (*) (h264 1920x804 24.000fps)\n     (+) Audio --aid=1 --alang=rus (*) (dts 6ch 48000Hz)\n    Using hardware decoding (vaapi-copy).                         <<<--- THIS\n    AO: [alsa] 48000Hz stereo 2ch float\n    VO: [gpu] 1920x804 nv12\n    AV: 00:00:24 \/ 02:00:38 (0%) A-V:  0.000\n    Saving state.<\/code><\/pre>\n<p>or by viewing output of <a href=\"https:\/\/vminko.org\/storage\/pocket3\/logs\/vainfo.txt\">vainfo<\/a>.<\/p>\n<p>See also <a href=\"https:\/\/github.com\/intel\/media-driver#components-and-features\">Components and Features<\/a> of Intel(R) Media Driver for VAAPI.<\/p>\n<p>Hardware decoding support allows the GPD Pocket 3 to play 4K 60fps video perfectly smoothly. For playback, users have a choice of several media players available. At minimum, the mpv and vlc players have been tested and successfully play 4K video.<\/p>\n<h1 id=\"accelerometer\">Accelerometer<\/h1>\n<p>GPD Pocket 3 has a built-in accelerometer <em>Memsic MXC4005XC<\/em>. It can be used to change screen orientation automatically. If you are interested - read this section.<\/p>\n<p>First of all, you need to install custom ebuild <a href=\"https:\/\/vminko.org\/storage\/pocket3\/configs\/usr\/local\/portage\/sys-apps\/iio-sensor-proxy\/iio-sensor-proxy-2.0.ebuild\">iio-sensor-proxy-2.0.ebuild<\/a>, which provides <code>iio-sensor-proxy<\/code> daemon with optional systemd dependency.<br \/>\nDownload the content of <a href=\"https:\/\/vminko.org\/storage\/pocket3\/configs\/usr\/local\/portage\/sys-apps\/iio-sensor-proxy\/\">iio-sensor-proxy<\/a> to <code>\/usr\/local\/portage\/sys-apps\/iio-sensor-proxy<\/code> and install the package:<\/p>\n<pre><code>    cd \/usr\/local\/portage\/sys-apps\/iio-sensor-proxy\n    ebuild iio-sensor-proxy-2.0.ebuild digest\n    emerge -av iio-sensor-proxy<\/code><\/pre>\n<p>Add iio-sensor-proxy to the default run level:<\/p>\n<pre><code>    rc-update add iio-sensor-proxy default<\/code><\/pre>\n<p>Download <a href=\"https:\/\/vminko.org\/storage\/pocket3\/configs\/usr\/local\/bin\/autorotate.sh\">autorotate.sh<\/a> to <code>\/usr\/local\/bin<\/code> and setup the relevant permissions:<\/p>\n<pre><code>    chmod a+x \/usr\/local\/bin\/autorotate.sh<\/code><\/pre>\n<p><code>autorotate.sh<\/code> is a small and dirty daemon written in Bash. You need to make it start when X11 session starts. If you use openbox WM, just add the following line to your <a href=\"https:\/\/vminko.org\/storage\/pocket3\/configs\/home\/user\/.config\/openbox\/autostart.sh\">~\/.config\/openbox\/autostart.sh<\/a>:<\/p>\n<pre><code>    \/usr\/local\/bin\/autorotate.sh &<\/code><\/pre>\n<p>That's it. Restart X11 session and your screen, touchscreen and digitizer orientation will adjust automatically with the device orientation.<\/p>\n<h1 id=\"sound\">Sound<\/h1>\n<p>Supported by <code>CONFIG_SND_HDA_INTEL<\/code>. I recommend to compile alsa-lib with all plugins (<code>ALSA_PCM_PLUGINS<\/code>, see <a href=\"https:\/\/vminko.org\/storage\/pocket3\/configs\/etc\/portage\/make.conf\">make.conf<\/a> as example).<\/p>\n<p>In general ALSA supports the Realtek ALC269 quite well: both internal speaker and mic work fine as well as headphones jacks. ALSA mutes the speaker when headphones jack is used.<\/p>\n<h1 id=\"net\">Networking<\/h1>\n<h2>Ethernet<\/h2>\n<p>Supported by <code>CONFIG_R8169<\/code>. Requires firmware <code>rtl_nic\/rtl8125b-2.fw<\/code>. Configured via default gentoo net config. <a href=\"https:\/\/vminko.org\/storage\/pocket3\/configs\/etc\/conf.d\/net\">Here<\/a> is an example of eth0 definition with static IP. See <a href=\"https:\/\/wiki.gentoo.org\/wiki\/Handbook:AMD64\/Installation\/Networking\">Gentoo Network Configuration<\/a> for details.<\/p>\n<p><code>ethtool<\/code> may be used to detect whether ethernet cable is plugged or not.<\/p>\n<h2>WiFi<\/h2>\n<p>WiFi is also supported by kernel (<code>CONFIG_IWLWIFI<\/code>). The driver requires binary firmware <code>iwlwifi-ty-a0-gf-a0-89.ucode&#039; and &#039;iwlwifi-ty-a0-gf-a0.pnvm<\/code>.<\/p>\n<p>WiFi connection can be configured via wpa_supplicant. See <a href=\"https:\/\/wiki.gentoo.org\/wiki\/Handbook:AMD64\/Networking\/Wireless\">Wireless Networking<\/a> for details.<\/p>\n<p>The iwl driver supports power management, which is enabled by default. You can check whether power management is turned on using <code>iwconfig<\/code>:<\/p>\n<pre><code>    wlan0     IEEE 802.11  ESSID:\"vm\"  \n              Mode:Managed  Frequency:2.462 GHz  Access Point: 46:73:9D:8F:76:BA   \n              Bit Rate=144.4 Mb\/s   Tx-Power=22 dBm   \n              Retry short limit:7   RTS thr:off   Fragment thr:off\n              Power Management:on\n              Link Quality=70\/70  Signal level=-38 dBm  \n              Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0\n              Tx excessive retries:0  Invalid misc:962   Missed beacon:0<\/code><\/pre>\n<p>This file provides the temperature of the WiFi chip:<\/p>\n<pre><code>    \/sys\/devices\/virtual\/thermal\/thermal_zone1\/temp<\/code><\/pre>\n<h2>Bluetooth<\/h2>\n<p>Bluetooth should be supported by modern Linux kernels. However, we did not have the need to configure Bluetooth, so this functionality remains untested for now.<br \/>\nNevertheless, if you want to configure it, the driver requires binary firmware <code>intel\/ibt-0041-0041.sfi<\/code>. Enable the use of this firmware in the kernel (parameter <code>CONFIG_EXTRA_FIRMWARE<\/code>).<\/p>\n<h2>rfkill<\/h2>\n<p>GPD Pocket 3 does not have a hardware rfkill switch. But you can configure software button using the rfkill tool. See <a href=\"https:\/\/vminko.org\/storage\/pocket3\/configs\/usr\/local\/bin\/toggle_wireless.sh\">toggle_wireless.sh<\/a> as example. The script toggles wireless connectivity for Wi-Fi, Bluetooth, and other radio devices.<\/p>\n<h1 id=\"acpi\">ACPI<\/h1>\n<p>In order to handle ACPI events, you need to install the ACPI daemon and add it to the boot runlevel:<\/p>\n<pre><code>emerge -av acpid\nrc-update add acpid boot<\/code><\/pre>\n<p>All ACPI events are configured in the <a href=\"https:\/\/vminko.org\/storage\/pocket3\/configs\/etc\/acpi\/default.sh\">default.sh<\/a>. Here is a short description of the ACPI events handled by <code>default.sh<\/code>:<\/p>\n<ul>\n<li><em>Power<\/em> - Generates keycode 192 (XF86Launch0) via <code>acpi_fakekey<\/code>, which shows the system info window. You can uncomment one line in the script to turns the system off instead.<\/li>\n<li><em>Lid<\/em> - Suspends to RAM if the display is not turned off via locked via <a href=\"https:\/\/vminko.org\/storage\/pocket3\/configs\/usr\/local\/bin\/dpms.sh\">dpms.sh<\/a>. See <a href=\"https:\/\/vminko.org\/storage\/pocket3\/configs\/etc\/pm\/sleep.d\/00dpms\">00dpms<\/a> for details.<\/li>\n<li><em>AC plug in\/out<\/em> - Switches cpufreq governor to performance when AC gets connected and to powersave when AC gets disconnected.<\/li>\n<\/ul>\n<p>Besides the events handled in <a href=\"https:\/\/vminko.org\/storage\/pocket3\/configs\/etc\/acpi\/default.sh\">default.sh<\/a>, acpid also catches the following ones:<\/p>\n<ul>\n<li><code>video\/brightnessdown BRTDN 00000087 00000000 K<\/code><\/li>\n<li><code>video\/brightnessup BRTUP 00000086 00000000 K<\/code><\/li>\n<li><code>button\/volumedown VOLDN 00000080 00000000 K<\/code><\/li>\n<li><code>button\/volumeup VOLUP 00000080 00000000 K<\/code><\/li>\n<li><code>button\/mute MUTE 00000080 00000000 K<\/code><\/li>\n<li><code>jack\/headphone HEADPHONE plug<\/code><\/li>\n<li><code>jack\/microphone MICROPHONE plug<\/code><\/li>\n<li><code>jack\/microphone MICROPHONE unplug<\/code><\/li>\n<li><code>jack\/headphone HEADPHONE unplug<\/code><\/li>\n<\/ul>\n<p>All multimedia keys generate scancode and are described in the <a href=\"#input\">Input<\/a> section. However, you can write a handler for the respective keyboard events. The main advantage of ACPI hot keys is that they're not dependent on WM (which handles multimedia keys) and work even in console and SDL programs.<\/p>\n<p>You can use the <code>acpi<\/code> command to monitor the AC and battery information:<\/p>\n<pre><code>    #acpi -abit\n    Battery 0: Charging, 85%, 73:00:00 until charged\n    Battery 0: design capacity 3947 mAh, last full capacity 3478 mAh = 88%\n    Adapter 0: on-line<\/code><\/pre>\n<p>ACPI does not provide any information about Fan and Cooling. It looks like the Fan can only be controlled by hardware.<\/p>\n<h1 id=\"cpufreq\">CPU frequency scaling<\/h1>\n<p>Supported by <code>CONFIG_X86_INTEL_PSTATE<\/code> The default governor can be selected via options <code>CONFIG_CPU_FREQ_DEFAULT_GOV_*<\/code>.<\/p>\n<p>Install <code>sys-power\/cpupower<\/code> packages in order to monitor or control frequency scaling:<\/p>\n<pre><code>    $ cpupower frequency-info \n    analyzing CPU 0:\n      driver: intel_pstate\n      CPUs which run at the same hardware frequency: 0\n      CPUs which need to have their frequency coordinated by software: 0\n      maximum transition latency:  Cannot determine or is not supported.\n      hardware limits: 400 MHz - 3.70 GHz\n      available cpufreq governors: performance powersave\n      current policy: frequency should be within 400 MHz and 3.70 GHz.\n                      The governor \"performance\" may decide which speed to use\n                      within this range.\n      current CPU frequency: Unable to call hardware\n      current CPU frequency: 1.48 GHz (asserted by call to kernel)\n      boost state support:\n        Supported: yes\n        Active: yes<\/code><\/pre>\n<h1 id=\"suspend\">Suspending<\/h1>\n<h2>Suspend-to-RAM<\/h2>\n<p>Suspend-to-RAM (aka sleep or ACPI S3 state) is supported by <code>CONFIG_SUSPEND<\/code> and works flawlessly.<\/p>\n<h2>Suspend-to-disk<\/h2>\n<p>In order to use native Linux hibernator, you need to enable <code>CONFIG_HIBERNATION<\/code> and specify your swap partition either in <code>CONFIG_PM_STD_PARTITION<\/code> or in the <code>resume<\/code> kernel parameter.<\/p>\n<p>ACPI subsystem in GPD Pocket 3 does not generate an event when battery capacity changes. Therefore in order to perform automatic hibernation when battery capacity goes beyond critical level, we need a daemon monitoring the battery capacity level. One simple way to implement this is to use a cron daemon with a simple script checking the battery level.<\/p>\n<p>You can use <a href=\"https:\/\/vminko.org\/storage\/pocket3\/configs\/usr\/local\/bin\/low_battery_handler.sh\">low_battery_handler.sh<\/a> to check the battery level and hibernate when the battery level is less than or equal to 3%.<\/p>\n<p>There are <a href=\"https:\/\/wiki.gentoo.org\/wiki\/Cron\/en\">various cron implementations<\/a> available in the Gentoo repository, which slightly differ in configuration. In case of dcron, do the following as root.<\/p>\n<pre><code>    emerge -av dcron\n    rc-update add dcron boot\n    crontab -e<\/code><\/pre>\n<p>Add the following line to opened cron configuration file:<\/p>\n<pre><code>    * * * * * \/usr\/local\/bin\/low_battery_handler.sh<\/code><\/pre>\n<p>That's it. Your Pocket 3 should now hibernate automatically on low battery.<\/p>\n<h2>Power Management Utilities<\/h2>\n<p>You can use <code>pm-utils<\/code> package (the <a href=\"https:\/\/wiki.gentoo.org\/wiki\/Suspend_and_hibernate#Suspend_to_disk_with_sys-power.2Fpm-utils\">power management utilities<\/a>) in order to run user supplied scripts on suspend and resume. Additionally, you may be interested in the following:<\/p>\n<ul>\n<li><a href=\"https:\/\/vminko.org\/storage\/pocket3\/configs\/usr\/local\/portage\/sys-power\/pm-utils\/files\/1.4.1-on-failure-param.patch\">1.4.1-on-failure-param.patch<\/a> - adds <code>ON_FAILURE<\/code> parameter for <a href=\"https:\/\/vminko.org\/storage\/pocket3\/configs\/etc\/pm\/config.d\/gentoo\">gentoo<\/a> pm-utils config, which allows to execute a command when one of the hooks fails.<\/li>\n<li><a href=\"https:\/\/vminko.org\/storage\/pocket3\/configs\/etc\/pm\/sleep.d\/00dpms\">00dpms<\/a> - a hook which inhibits suspend when LCD is turned off, requires <a href=\"https:\/\/vminko.org\/storage\/pocket3\/configs\/usr\/local\/bin\/xrun.sh\">xrun.sh<\/a>.<\/li>\n<\/ul>\n<p>Important Note: Although pm-utils is officially considered deprecated and hasn't been developed since 2013, it remains a practical tool for users who need a simple and working sleep\/wake management system without unnecessary complexity. Major distributions (Arch, Debian, Gentoo) are migrating to elogind\/systemd-logind, but pm-utils continues to function successfully on systems with traditional init systems.<\/p>\n<p>Why pm-utils nonetheless: Unlike elogind, which requires proper configuration of D-Bus, polkit, seat management and can conflict with other power management daemons, pm-utils presents a simple model with clear hooks in \/etc\/pm\/sleep.d\/ and works &quot;out of the box&quot; with minimal configuration. This is especially relevant for OpenRC users or other alternative init systems, where elogind integration may require additional debugging.<\/p>\n<p>Recommendation: If pm-utils solves power management tasks without issues, there's no need to migrate to elogind just for the sake of being &quot;modern.&quot; However, it's worth considering that new desktop environments and applications may gradually lose compatibility with pm-utils, expecting the presence of the org.freedesktop.login1 D-Bus interface.<\/p>\n<p><a href=\"https:\/\/vminko.org\/storage\/pocket3\/configs\/usr\/local\/portage\/sys-power\/\">Here<\/a>  you can find a modern ebuild for building pm-utils along with patches containing fixes and minor improvements.<\/p>\n<h1 id=\"webcam\">Web camera<\/h1>\n<p>To support the camera, the following kernel options are required: <code>CONFIG_USB_VIDEO_CLASS<\/code>, <code>CONFIG_MEDIA_CAMERA_SUPPORT<\/code>, <code>CONFIG_VIDEO_V4L2_I2C<\/code>, <code>CONFIG_VIDEOBUF2_V4L2<\/code>.<br \/>\nThe camera functionality can be tested using the following <code>ffmpeg<\/code> command:<\/p>\n<pre><code>    ffmpeg -f video4linux2 -i \/dev\/v4l\/by-id\/usb-Alcor_Micro__Corp._USB_2.0_Camera-video-index0 -input_format mjpeg -framerate 30 -vf \"format=yuv420p\" -f xv display<\/code><\/pre>\n<h1 id=\"issues\">Known issues<\/h1>\n<ol>\n<li>Fingerprint reader is not supported.<\/li>\n<li>\n<p>The kernel shows the following ACPI error messages during bootup:<\/p>\n<pre><code>ACPI BIOS Error (bug): Could not resolve symbol [\\_SB.UBTC.RUCC], AE_NOT_FOUND (20240827\/psargs-332)\nACPI Error: Aborting method \\_SB.PC00.TXHC.RHUB.SS01._PLD due to previous error (AE_NOT_FOUND) (20240827\/psparse-529)\nACPI BIOS Error (bug): Could not resolve symbol [\\_SB.UBTC.RUCC], AE_NOT_FOUND (20240827\/psargs-332)\nACPI Error: Aborting method \\_SB.PC00.TXHC.RHUB.SS01._PLD due to previous error (AE_NOT_FOUND) (20240827\/psparse-529)\nACPI BIOS Error (bug): Could not resolve symbol [\\_SB.UBTC.RUCC], AE_NOT_FOUND (20240827\/psargs-332)\nACPI Error: Aborting method \\_SB.PC00.XHCI.RHUB.HS01._PLD due to previous error (AE_NOT_FOUND) (20240827\/psparse-529)\nACPI BIOS Error (bug): Could not resolve symbol [\\_SB.UBTC.RUCC], AE_NOT_FOUND (20240827\/psargs-332)\nACPI Error: Aborting method \\_SB.PC00.XHCI.RHUB.HS01._PLD due to previous error (AE_NOT_FOUND) (20240827\/psparse-529)\nACPI BIOS Error (bug): Could not resolve symbol [\\_SB.UBTC.RUCC], AE_NOT_FOUND (20240827\/psargs-332)\nACPI Error: Aborting method \\_SB.PC00.TXHC.RHUB.SS01._PLD due to previous error (AE_NOT_FOUND) (20240827\/psparse-529)\nACPI BIOS Error (bug): Could not resolve symbol [\\_SB.UBTC.RUCC], AE_NOT_FOUND (20240827\/psargs-332)\nACPI Error: Aborting method \\_SB.PC00.TXHC.RHUB.SS01._PLD due to previous error (AE_NOT_FOUND) (20240827\/psparse-529)\nACPI BIOS Error (bug): Could not resolve symbol [\\_SB.UBTC.RUCC], AE_NOT_FOUND (20240827\/psargs-332)\nACPI Error: Aborting method \\_SB.PC00.XHCI.RHUB.HS01._PLD due to previous error (AE_NOT_FOUND) (20240827\/psparse-529)\nACPI BIOS Error (bug): Could not resolve symbol [\\_SB.UBTC.RUCC], AE_NOT_FOUND (20240827\/psargs-332)\nACPI Error: Aborting method \\_SB.PC00.XHCI.RHUB.HS01._PLD due to previous error (AE_NOT_FOUND) (20240827\/psparse-529)\nACPI BIOS Error (bug): Could not resolve symbol [\\_SB.UBTC.RUCC], AE_NOT_FOUND (20240827\/psargs-332)\nACPI Error: Aborting method \\_SB.PC00.TXHC.RHUB.SS01._PLD due to previous error (AE_NOT_FOUND) (20240827\/psparse-529)\nACPI BIOS Error (bug): Could not resolve symbol [\\_SB.UBTC.RUCC], AE_NOT_FOUND (20240827\/psargs-332)\nACPI Error: Aborting method \\_SB.PC00.TXHC.RHUB.SS01._PLD due to previous error (AE_NOT_FOUND) (20240827\/psparse-529)\nACPI BIOS Error (bug): Could not resolve symbol [\\_SB.UBTC.RUCC], AE_NOT_FOUND (20240827\/psargs-332)\nACPI Error: Aborting method \\_SB.PC00.XHCI.RHUB.HS01._PLD due to previous error (AE_NOT_FOUND) (20240827\/psparse-529)\nACPI BIOS Error (bug): Could not resolve symbol [\\_SB.UBTC.RUCC], AE_NOT_FOUND (20240827\/psargs-332)\nACPI Error: Aborting method \\_SB.PC00.XHCI.RHUB.HS01._PLD due to previous error (AE_NOT_FOUND) (20240827\/psparse-529)\nACPI BIOS Error (bug): Could not resolve symbol [\\_SB.PC00.LPCB.HEC.SEN4], AE_NOT_FOUND (20240827\/psargs-332)\nACPI Error: Aborting method \\_SB.PC00.LPCB.H_EC._QF1 due to previous error (AE_NOT_FOUND) (20240827\/psparse-529)\nACPI BIOS Error (bug): Could not resolve symbol [\\_SB.UBTC.RUCC], AE_NOT_FOUND (20240827\/psargs-332)\nACPI Error: Aborting method \\_SB.PC00.TXHC.RHUB.SS01._PLD due to previous error (AE_NOT_FOUND) (20240827\/psparse-529)\nACPI BIOS Error (bug): Could not resolve symbol [\\_SB.UBTC.RUCC], AE_NOT_FOUND (20240827\/psargs-332)\nACPI Error: Aborting method \\_SB.PC00.TXHC.RHUB.SS01._PLD due to previous error (AE_NOT_FOUND) (20240827\/psparse-529)\nACPI BIOS Error (bug): Could not resolve symbol [\\_SB.UBTC.RUCC], AE_NOT_FOUND (20240827\/psargs-332)\nACPI Error: Aborting method \\_SB.PC00.XHCI.RHUB.HS01._PLD due to previous error (AE_NOT_FOUND) (20240827\/psparse-529)\nACPI BIOS Error (bug): Could not resolve symbol [\\_SB.UBTC.RUCC], AE_NOT_FOUND (20240827\/psargs-332)\nACPI Error: Aborting method \\_SB.PC00.XHCI.RHUB.HS01._PLD due to previous error (AE_NOT_FOUND) (20240827\/psparse-529)\nACPI BIOS Error (bug): Could not resolve symbol [\\_SB.UBTC.RUCC], AE_NOT_FOUND (20240827\/psargs-332)\nACPI Error: Aborting method \\_SB.PC00.XHCI.RHUB.HS01._PLD due to previous error (AE_NOT_FOUND) (20240827\/psparse-529)\nACPI BIOS Error (bug): Could not resolve symbol [\\_SB.UBTC.RUCC], AE_NOT_FOUND (20240827\/psargs-332)\nACPI Error: Aborting method \\_SB.PC00.XHCI.RHUB.HS01._PLD due to previous error (AE_NOT_FOUND) (20240827\/psparse-529)\nACPI BIOS Error (bug): Could not resolve symbol [\\_SB.UBTC.RUCC], AE_NOT_FOUND (20240827\/psargs-332)\nACPI Error: Aborting method \\_SB.PC00.TXHC.RHUB.SS01._PLD due to previous error (AE_NOT_FOUND) (20240827\/psparse-529)\nACPI BIOS Error (bug): Could not resolve symbol [\\_SB.UBTC.RUCC], AE_NOT_FOUND (20240827\/psargs-332)\nACPI Error: Aborting method \\_SB.PC00.TXHC.RHUB.SS01._PLD due to previous error (AE_NOT_FOUND) (20240827\/psparse-529)\nACPI BIOS Error (bug): Could not resolve symbol [\\_SB.PC00.LPCB.HEC.SEN4], AE_NOT_FOUND (20240827\/psargs-332)\nACPI Error: Aborting method \\_SB.PC00.LPCB.H_EC._QF1 due to previous error (AE_NOT_FOUND) (20240827\/psparse-529)\nACPI BIOS Error (bug): Could not resolve symbol [\\_SB.PC00.LPCB.HEC.SEN4], AE_NOT_FOUND (20240827\/psargs-332)\nACPI Error: Aborting method \\_SB.PC00.LPCB.H_EC._QF1 due to previous error (AE_NOT_FOUND) (20240827\/psparse-529)\nACPI BIOS Error (bug): Could not resolve symbol [\\_SB.PC00.LPCB.HEC.SEN4], AE_NOT_FOUND (20240827\/psargs-332)\nACPI Error: Aborting method \\_SB.PC00.LPCB.H_EC._QF1 due to previous error (AE_NOT_FOUND) (20240827\/psparse-529)\nACPI BIOS Error (bug): Could not resolve symbol [\\_SB.PC00.LPCB.HEC.SEN4], AE_NOT_FOUND (20240827\/psargs-332)\nACPI Error: Aborting method \\_SB.PC00.LPCB.H_EC._QF1 due to previous error (AE_NOT_FOUND) (20240827\/psparse-529)\nACPI BIOS Error (bug): Could not resolve symbol [\\_SB.UBTC.RUCC], AE_NOT_FOUND (20240827\/psargs-332)\nACPI Error: Aborting method \\_SB.PC00.TXHC.RHUB.SS01._PLD due to previous error (AE_NOT_FOUND) (20240827\/psparse-529)\nACPI BIOS Error (bug): Could not resolve symbol [\\_SB.UBTC.RUCC], AE_NOT_FOUND (20240827\/psargs-332)\nACPI Error: Aborting method \\_SB.PC00.TXHC.RHUB.SS01._PLD due to previous error (AE_NOT_FOUND) (20240827\/psparse-529)\nACPI BIOS Error (bug): Could not resolve symbol [\\_SB.UBTC.RUCC], AE_NOT_FOUND (20240827\/psargs-332)\nACPI Error: Aborting method \\_SB.PC00.XHCI.RHUB.HS01._PLD due to previous error (AE_NOT_FOUND) (20240827\/psparse-529)\nACPI BIOS Error (bug): Could not resolve symbol [\\_SB.UBTC.RUCC], AE_NOT_FOUND (20240827\/psargs-332)\nACPI Error: Aborting method \\_SB.PC00.XHCI.RHUB.HS01._PLD due to previous error (AE_NOT_FOUND) (20240827\/psparse-529)\nACPI BIOS Error (bug): Could not resolve symbol [\\_SB.PC00.LPCB.HEC.SEN4], AE_NOT_FOUND (20240827\/psargs-332)\nACPI Error: Aborting method \\_SB.PC00.LPCB.H_EC._QF1 due to previous error (AE_NOT_FOUND) (20240827\/psparse-529)\nACPI BIOS Error (bug): Could not resolve symbol [\\_SB.PC00.LPCB.HEC.SEN4], AE_NOT_FOUND (20240827\/psargs-332)\nACPI Error: Aborting method \\_SB.PC00.LPCB.H_EC._QF1 due to previous error (AE_NOT_FOUND) (20240827\/psparse-529)\nACPI BIOS Error (bug): Could not resolve symbol [\\_SB.PC00.LPCB.HEC.SEN4], AE_NOT_FOUND (20240827\/psargs-332)\nACPI Error: Aborting method \\_SB.PC00.LPCB.H_EC._QF1 due to previous error (AE_NOT_FOUND) (20240827\/psparse-529)<\/code><\/pre>\n<\/li>\n<\/ol>\n<p>These ACPI BIOS errors occur during Linux boot due to missing ACPI object references in the laptop's firmware tables. The errors indicate USB controller issues with _SB.UBTC.RUCC symbols and embedded controller problems with _SB.PC00.LPCB.HEC.SEN4 thermal sensor definitions.<\/p>\n<p>Root Cause: The BIOS firmware contains incomplete ACPI table definitions where USB controllers and embedded controllers reference non-existent objects. This is a common manufacturer defect where ACPI tables violate standards but don't affect Windows functionality, so vendors don't fix them.<\/p>\n<p>Impact Assessment: These errors are typically cosmetic and don't affect laptop functionality. Such ACPI errors rarely cause practical problems in the industry. In this author's practical experience, no operational consequences have been observed - USB ports work normally, hibernation functions properly, and thermal management operates correctly despite the error messages appearing consistently in kernel logs.<\/p>\n<p>The Linux kernel handles missing ACPI objects gracefully by falling back to alternative enumeration methods, making these particular AE_NOT_FOUND errors largely harmless in real-world usage scenarios.<\/p>\n<h1 id=\"benchmark\">Benchmarks<\/h1>\n<p>Here are few relevant benchmarks:<\/p>\n<table>\n<thead>\n<tr>\n<th>Test conditions<\/th>\n<th style=\"text-align: right;\">Results<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Bootup (from EFI boot menu to X11 WM)<\/td>\n<td style=\"text-align: right;\">11 sec<\/td>\n<\/tr>\n<tr>\n<td>Suspend-to-disk aka hibernate (linux-6.15.4, only X11 WM, no apps running)<\/td>\n<td style=\"text-align: right;\">8 sec<\/td>\n<\/tr>\n<tr>\n<td>Resume from suspend-to-disk (from EFI boot menu, linux-6.15.4)<\/td>\n<td style=\"text-align: right;\">9 sec<\/td>\n<\/tr>\n<tr>\n<td>Suspend-to-RAM (linux-6.15.4)<\/td>\n<td style=\"text-align: right;\">3 sec<\/td>\n<\/tr>\n<tr>\n<td>Resume from suspend-to-RAM (linux-6.15.4)<\/td>\n<td style=\"text-align: right;\">2 sec<\/td>\n<\/tr>\n<tr>\n<td>SSD read speed (WD Black SN850X, hdparm)<\/td>\n<td style=\"text-align: right;\">2600 MB\/s<\/td>\n<\/tr>\n<tr>\n<td>SSD write speed (WD Black SN850X, dd, bs=1M)<\/td>\n<td style=\"text-align: right;\">3400 MB\/s<\/td>\n<\/tr>\n<tr>\n<td>WiFi download speed (with AP based on Atheros QCA988x)<\/td>\n<td style=\"text-align: right;\">~450 Mbit\/s<\/td>\n<\/tr>\n<tr>\n<td>WiFi upload speed (with AP based on Atheros QCA988x)<\/td>\n<td style=\"text-align: right;\">~90 Mbit\/s<\/td>\n<\/tr>\n<tr>\n<td>Quake 3 (1920x1200, high quality, xorg-server-21.1.18, mesa-25.1.7)<\/td>\n<td style=\"text-align: right;\">137 fps<\/td>\n<\/tr>\n<tr>\n<td>glxgears (6.15.4, xorg-server-21.1.18, mesa-25.1.7)<\/td>\n<td style=\"text-align: right;\">4000 fps<\/td>\n<\/tr>\n<tr>\n<td>Idle consumption (minimal brightness, no wireless)<\/td>\n<td style=\"text-align: right;\">3.4 W<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h1 id=\"history\">History of changes<\/h1>\n<p><strong>Sept 29 2025<\/strong><br \/>\nFirst public release.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction The GPD Pocket 3 represents the third generation of GPD&#8217;s ultra-mobile PC (UMPC) series, featuring Intel Tiger Lake architecture and a unique convertible tablet design. This manual is intended to help users configure Gentoo distribution of the GNU\/Linux operating system for GPD Pocket 3 handheld computer. Unlike mainstream laptops, the GPD Pocket 3 presents &hellip; <a href=\"https:\/\/handheld.computer\/?page_id=2325\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Gentoo on a GPD Pocket 3&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":2358,"parent":221,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"tags":[430,142,436,15,642,641,577,643,229,429],"class_list":["post-2325","page","type-page","status-publish","has-post-thumbnail","hentry","tag-convertible","tag-gpd","tag-intel","tag-linux","tag-manual","tag-pocket3","tag-tablet","tag-touchscreen","tag-umpc","tag-x86"],"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/handheld.computer\/index.php?rest_route=\/wp\/v2\/pages\/2325","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/handheld.computer\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/handheld.computer\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/handheld.computer\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/handheld.computer\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2325"}],"version-history":[{"count":32,"href":"https:\/\/handheld.computer\/index.php?rest_route=\/wp\/v2\/pages\/2325\/revisions"}],"predecessor-version":[{"id":2361,"href":"https:\/\/handheld.computer\/index.php?rest_route=\/wp\/v2\/pages\/2325\/revisions\/2361"}],"up":[{"embeddable":true,"href":"https:\/\/handheld.computer\/index.php?rest_route=\/wp\/v2\/pages\/221"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/handheld.computer\/index.php?rest_route=\/wp\/v2\/media\/2358"}],"wp:attachment":[{"href":"https:\/\/handheld.computer\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2325"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/handheld.computer\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2325"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}