<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Microsoft Surface on Ivon's Blog</title><link>https://ivonblog.com/en-us/tags/microsoft-surface/</link><description>Recent content in Microsoft Surface on Ivon's Blog</description><generator>Hugo -- gohugo.io</generator><language>en</language><managingEditor>infoivonblog.nkfjt@aleeas.com (Ivon Huang)</managingEditor><webMaster>infoivonblog.nkfjt@aleeas.com (Ivon Huang)</webMaster><copyright>You are welcome to share articles from Ivon's blog (ivonblog.com). Please cite the source article URL when sharing. All article content is licensed under a Creative Commons Attribution-ShareAlike 4.0 license, unless otherwise stated. For commercial use, please contact me first.</copyright><lastBuildDate>Wed, 03 Jun 2026 19:00:00 +0800</lastBuildDate><atom:link href="https://ivonblog.com/en-us/tags/microsoft-surface/index.xml" rel="self" type="application/rss+xml"/><follow_challenge><feedId>56005902658351104</feedId><userId>1132431067563556864</userId></follow_challenge><item><title>Typing with a On-Screen Keyboard on Linux Touchscreens (X11 &amp; Wayland Desktops)</title><link>https://ivonblog.com/en-us/posts/linux-on-screen-keyboard/</link><pubDate>Wed, 03 Jun 2026 19:00:00 +0800</pubDate><author>infoivonblog.nkfjt@aleeas.com (Ivon Huang)</author><guid>https://ivonblog.com/en-us/posts/linux-on-screen-keyboard/</guid><description>&lt;!-- Co-translated by ChatGPT --&gt;
&lt;p&gt;Use virtual / on-screen keyboard on Linux devices with touch screen.
&lt;figure&gt;
 &lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://static.ivonblog.com/posts/linux-on-screen-keyboard/images/title.webp"
 onerror="this.onerror=null;this.src='https://ivonblog.com/images/unable-to-load-the-image-pepe.webp'"
 &gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;If you use Linux tablets like the Microsoft Surface, Lenovo Yoga, Pine64 PineTab, or Librem Tab, you will probably run into touchscreen text input sooner or later. Can we type Chinese with an on-screen keyboard?&lt;/p&gt;
&lt;p&gt;Touch devices usually provide a virtual keyboard for typing. On Windows we have the &lt;a href="https://support.microsoft.com/zh-tw/windows/%E4%BD%BF%E7%94%A8%E8%9E%A2%E5%B9%95%E5%B0%8F%E9%8D%B5%E7%9B%A4-osk-%E8%BC%B8%E5%85%A5-ecbb5e08-5b4e-d8c8-f794-81dbf896267a" target="_blank" rel="noreferrer"&gt;on-screen keyboard&lt;/a&gt;, so what about Linux?&lt;/p&gt;
&lt;p&gt;That depends on which Linux desktop environment you use, and whether it runs on the X11 or Wayland display protocol. It gets messy fast, so I will split it by desktop environment.&lt;/p&gt;</description><content:encoded>&lt;!-- Co-translated by ChatGPT --&gt;
&lt;p&gt;Use virtual / on-screen keyboard on Linux devices with touch screen.
&lt;figure&gt;
 &lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://static.ivonblog.com/posts/linux-on-screen-keyboard/images/title.webp"
 onerror="this.onerror=null;this.src='https://ivonblog.com/images/unable-to-load-the-image-pepe.webp'"
 &gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;If you use Linux tablets like the Microsoft Surface, Lenovo Yoga, Pine64 PineTab, or Librem Tab, you will probably run into touchscreen text input sooner or later. Can we type Chinese with an on-screen keyboard?&lt;/p&gt;
&lt;p&gt;Touch devices usually provide a virtual keyboard for typing. On Windows we have the &lt;a href="https://support.microsoft.com/zh-tw/windows/%E4%BD%BF%E7%94%A8%E8%9E%A2%E5%B9%95%E5%B0%8F%E9%8D%B5%E7%9B%A4-osk-%E8%BC%B8%E5%85%A5-ecbb5e08-5b4e-d8c8-f794-81dbf896267a" target="_blank" rel="noreferrer"&gt;on-screen keyboard&lt;/a&gt;, so what about Linux?&lt;/p&gt;
&lt;p&gt;That depends on which Linux desktop environment you use, and whether it runs on the X11 or Wayland display protocol. It gets messy fast, so I will split it by desktop environment.&lt;/p&gt;

&lt;h2 class="relative group"&gt;1. Touchscreen Keyboards by Desktop Environment
 &lt;div id="1-touchscreen-keyboards-by-desktop-environment" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#1-touchscreen-keyboards-by-desktop-environment" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;GNOME
 &lt;div id="gnome" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#gnome" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;The default desktop environment for distributions such as Ubuntu, Fedora, and Debian. &lt;strong&gt;Latest version: GNOME 50&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;GNOME 40 and later include a built-in on-screen keyboard, available on both X11 and Wayland.&lt;/p&gt;
&lt;p&gt;In System Settings → Accessibility, enable the on-screen keyboard.
&lt;figure&gt;
 &lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://static.ivonblog.com/posts/linux-on-screen-keyboard/images/Screenshot2024004-37.webp"
 onerror="this.onerror=null;this.src='https://ivonblog.com/images/unable-to-load-the-image-pepe.webp'"
 &gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;After that, tapping the screen will bring up the OSK keyboard. Swipe up from the bottom of the screen to open it.
&lt;figure&gt;
 &lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://static.ivonblog.com/posts/linux-on-screen-keyboard/images/2024-11-30_00-59.webp"
 onerror="this.onerror=null;this.src='https://ivonblog.com/images/unable-to-load-the-image-pepe.webp'"
 &gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;But I think GNOME&amp;rsquo;s built-in keyboard is too bare-bones. I recommend using the &lt;a href="https://ivonblog.com/posts/how-to-install-gnome-extensions/" target="_blank" rel="noreferrer"&gt;GNOME Extension Manager&lt;/a&gt; to install &lt;a href="https://github.com/Vishram1123/gjs-osk" target="_blank" rel="noreferrer"&gt;GJS OSK&lt;/a&gt;, which gives you a more complete on-screen keyboard.&lt;/p&gt;

&lt;h3 class="relative group"&gt;KDE Plasma
 &lt;div id="kde-plasma" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#kde-plasma" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;The default desktop environment for Kubuntu, Fedora Spin, openSUSE, and SteamOS. &lt;strong&gt;Latest version: KDE Plasma 6.6&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;KDE&amp;rsquo;s touch keyboard has a lot of problems and is not very stable. You need at least KDE Plasam 6.6 or later before it starts becoming more usable.&lt;/p&gt;
&lt;p&gt;The Plasma Login Manager login screen has a &lt;code&gt;Maliit Keyboard&lt;/code&gt; virtual keyboard.&lt;/p&gt;
&lt;p&gt;On KDE with the X11 protocol, there is no good solution. There is &lt;code&gt;qtvirtualkeyboard&lt;/code&gt;, but it only works with programs using the QT framework. I recommend installing &lt;code&gt;onboard&lt;/code&gt; directly.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;KDE on Wayland uses &lt;code&gt;Maliit Keyboard&lt;/code&gt;, which is based on an input method originally developed for MeeGo. You may need to install the Mallit Keyboard package manually:&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt install maliit-keyboard&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Then go to System Settings → Keyboard → Virtual Keyboard, and enable Maliit Keyboard.
&lt;figure&gt;
 &lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://static.ivonblog.com/posts/linux-on-screen-keyboard/images/20241130_011038.webp"
 onerror="this.onerror=null;this.src='https://ivonblog.com/images/unable-to-load-the-image-pepe.webp'"
 &gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Click the input method icon in the system tray to wake the keyboard. Swipe down to close it.
&lt;figure&gt;
 &lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://static.ivonblog.com/posts/linux-on-screen-keyboard/images/20241130_004618.webp"
 onerror="this.onerror=null;this.src='https://ivonblog.com/images/unable-to-load-the-image-pepe.webp'"
 &gt;&lt;/figure&gt;

&lt;figure&gt;
 &lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://static.ivonblog.com/posts/linux-on-screen-keyboard/images/20241130_004453.webp"
 onerror="this.onerror=null;this.src='https://ivonblog.com/images/unable-to-load-the-image-pepe.webp'"
 &gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Maliit Keyboard supports Zhuyin and Pinyin input methods.&lt;/p&gt;
&lt;p&gt;Also, Maliit Keyboard cannot be used together with the Fcitx5 input method, because Maliit Keyboard and Fcitx5 are both started through KDE Plasma&amp;rsquo;s virtual keyboard mechanism. You can only use one at a time.&lt;/p&gt;
&lt;p&gt;If you want to use an on-screen keyboard to emulate keyboard input events and type Chinese through Fcitx5, you need to switch to &lt;a href="https://github.com/fortime/fcitx5-osk" target="_blank" rel="noreferrer"&gt;fcitx5-osk&lt;/a&gt;.&lt;/p&gt;

&lt;h3 class="relative group"&gt;Other Desktop Environments
 &lt;div id="other-desktop-environments" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#other-desktop-environments" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;First, for desktops running the X11 protocol: XFCE, Cinnamon, LXQT, and i3wm do not have their own on-screen keyboards, but since they all run on X11, installing &lt;code&gt;onboard&lt;/code&gt; is enough. GNOME X11 and KDE Plasma X11 can also use this keyboard.&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt install onboard&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;The Onboard keyboard is highly customizable. You can choose layouts according to your screen size.
&lt;figure&gt;
 &lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://static.ivonblog.com/posts/linux-on-screen-keyboard/images/Screenshot_20241130_113912.webp"
 onerror="this.onerror=null;this.src='https://ivonblog.com/images/unable-to-load-the-image-pepe.webp'"
 &gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;It can also emulate physical keyboard input, so it can work with Fcitx5 for typing Hanyu Pinyin.&lt;/p&gt;
&lt;p&gt;Basically, onboard only works properly on X11 desktops. Under Wayland it can only run through XWayland, and there are plenty of bugs.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Next, desktops running the Wayland protocol.&lt;/p&gt;
&lt;p&gt;For desktop environments or compositors written on top of wlroots, such as Sway, Hyprland, XFCE, use &lt;a href="https://github.com/jjsullivan5196/wvkbd" target="_blank" rel="noreferrer"&gt;wvkbd&lt;/a&gt; for typing. It is a minimalist Linux on-screen keyboard written in C, and it can emulate keyboard input events. Its appearance is customizable.
&lt;figure&gt;
 &lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://static.ivonblog.com/posts/linux-on-screen-keyboard/images/wvkbd.webp"
 onerror="this.onerror=null;this.src='https://ivonblog.com/images/unable-to-load-the-image-pepe.webp'"
 &gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Phosh includes the &lt;a href="https://gitlab.gnome.org/World/Phosh/squeekboard" target="_blank" rel="noreferrer"&gt;Squeekboard&lt;/a&gt; keyboard, which cannot be used in other desktop environments.&lt;/p&gt;
&lt;p&gt;KDE Plasma Mobile 6 includes &lt;a href="https://github.com/maliit/keyboard" target="_blank" rel="noreferrer"&gt;Maliit Keyboard&lt;/a&gt;. It supports Chinese Zhuyin, but it is unstable.&lt;/p&gt;
&lt;p&gt;Ubuntu Touch includes &lt;a href="https://github.com/maliit/keyboard" target="_blank" rel="noreferrer"&gt;Maliit Keyboard&lt;/a&gt;. It supports Chinese Zhuyin and is currently the only input method that is genuinely usable. It can only be used in the Lomiri desktop environment.&lt;/p&gt;

&lt;h2 class="relative group"&gt;2. Typing Chinese with a Touchscreen Keyboard
 &lt;div id="2-typing-chinese-with-a-touchscreen-keyboard" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#2-typing-chinese-with-a-touchscreen-keyboard" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Unfortunately, Linux touchscreen keyboards almost all support only English, and they cannot display Zhuyin on the keys. So you need to make good use of keyboards that emulate physical keyboard input events.&lt;/p&gt;
&lt;p&gt;Take the GNOME desktop with &lt;a href="https://extensions.gnome.org/extension/5949/gjs-osk/" target="_blank" rel="noreferrer"&gt;GJS OSK&lt;/a&gt; as an example.&lt;/p&gt;
&lt;p&gt;Install &lt;a href="https://ivonblog.com/posts/ubuntu-fcitx5/" target="_blank" rel="noreferrer"&gt;Fcitx5&lt;/a&gt; and enable the Hanyu Pinyin input method. Also install &lt;a href="https://extensions.gnome.org/extension/261/kimpanel/" target="_blank" rel="noreferrer"&gt;Input Method Panel&lt;/a&gt; to display the input method icon.&lt;/p&gt;
&lt;p&gt;Then use the on-screen keyboard to press CTRL + Space to switch input methods, or tap the &lt;code&gt;en&lt;/code&gt; keyboard icon in the system tray to switch input methods. After that, you can type Chinese using English letters.
&lt;figure&gt;
 &lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://static.ivonblog.com/posts/linux-on-screen-keyboard/images/2024-03-0818-58-442.webp"
 onerror="this.onerror=null;this.src='https://ivonblog.com/images/unable-to-load-the-image-pepe.webp'"
 &gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;If you need &amp;ldquo;handwriting input converted into text&amp;rdquo;, please refer to this article: &lt;a href="https://ivonblog.com/posts/linux-handwritten-chinese-im/" target="_blank" rel="noreferrer"&gt;Linux Chinese Handwriting IME&lt;/a&gt;&lt;/p&gt;

&lt;h2 class="relative group"&gt;References
 &lt;div id="references" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#references" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://help.gnome.org/users/gnome-help/stable/keyboard-osk.html.en" target="_blank" rel="noreferrer"&gt;Use an on-screen keyboard - GNOME Library&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/en/operating-systems/oracle-linux/7/accessibility/accessibility-WorkingWithOnScreenKeyboards.html" target="_blank" rel="noreferrer"&gt;4 Working With On-Screen Keyboards - Oracle Linux 7 Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://wiki.postmarketos.org/wiki/Input_methods" target="_blank" rel="noreferrer"&gt;Input methods - postmarketOS Wiki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://wiki.archlinux.org/title/Tablet_PC" target="_blank" rel="noreferrer"&gt;Tablet PC - ArchWiki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.martin-graesslin.com/blog/2021/03/using-maliit-keyboard-in-a-plasma-wayland-session/" target="_blank" rel="noreferrer"&gt;Using maliit-keyboard in a Plasma Wayland session - Martin&amp;rsquo;s Blog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://ivonblog.com/en-us/posts/linux-on-screen-keyboard/featured.webp"/></item><item><title>Linux Tablet Laptop Tips, Touch-Friendly Apps, and Chinese On-Screen Keyboards</title><link>https://ivonblog.com/en-us/posts/my-gnu-linux-tablet-setup/</link><pubDate>Sat, 07 Mar 2026 11:00:00 +0800</pubDate><author>infoivonblog.nkfjt@aleeas.com (Ivon Huang)</author><guid>https://ivonblog.com/en-us/posts/my-gnu-linux-tablet-setup/</guid><description>&lt;!-- Co-translated by ChatGPT --&gt;
&lt;p&gt;The tips and tricks for the Linux desktop on 2-in-1 laptop tablets.&lt;/p&gt;
&lt;p&gt;Here are the settings I use for Linux tablet laptops. I hope these notes can serve as a reference for other users of Linux tablet laptop devices.
&lt;figure&gt;
 &lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://static.ivonblog.com/posts/my-gnu-linux-tablet-setup/images/1.webp"
 onerror="this.onerror=null;this.src='https://ivonblog.com/images/unable-to-load-the-image-pepe.webp'"
 &gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Right now I have two tablets: the Pine64 PineTab 2 and the Microsoft Surface Go 2.&lt;/p&gt;
&lt;p&gt;Both sit somewhere between a tablet and a laptop. You could call them 2-in-1 tablet laptops or convertible laptops.&lt;/p&gt;
&lt;p&gt;They provide two interaction modes: touch and keyboard.&lt;/p&gt;
&lt;p&gt;Because of that, choosing an optimized Linux setup matters. It has to handle both touchscreen input and keyboard/mouse input.&lt;/p&gt;</description><content:encoded>&lt;!-- Co-translated by ChatGPT --&gt;
&lt;p&gt;The tips and tricks for the Linux desktop on 2-in-1 laptop tablets.&lt;/p&gt;
&lt;p&gt;Here are the settings I use for Linux tablet laptops. I hope these notes can serve as a reference for other users of Linux tablet laptop devices.
&lt;figure&gt;
 &lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://static.ivonblog.com/posts/my-gnu-linux-tablet-setup/images/1.webp"
 onerror="this.onerror=null;this.src='https://ivonblog.com/images/unable-to-load-the-image-pepe.webp'"
 &gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Right now I have two tablets: the Pine64 PineTab 2 and the Microsoft Surface Go 2.&lt;/p&gt;
&lt;p&gt;Both sit somewhere between a tablet and a laptop. You could call them 2-in-1 tablet laptops or convertible laptops.&lt;/p&gt;
&lt;p&gt;They provide two interaction modes: touch and keyboard.&lt;/p&gt;
&lt;p&gt;Because of that, choosing an optimized Linux setup matters. It has to handle both touchscreen input and keyboard/mouse input.&lt;/p&gt;

&lt;h2 class="relative group"&gt;1. Operating System Choice
 &lt;div id="1-operating-system-choice" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#1-operating-system-choice" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;The main rule is simple: use whichever Linux distro your hardware supports. Here, “Linux distro” does not include Android or ChromeOS. I want a “pure” GNU/Linux tablet.&lt;/p&gt;
&lt;p&gt;x86 tablets have UEFI and drivers that are easier to deal with, so distro choices are plentiful. Personally, I recommend Debian- and Ubuntu-based distros first. They have good support on both x86 and ARM tablets and are stable. Fedora- and Arch Linux-based distros come next: newer features, less stability. The usual bargain.&lt;/p&gt;
&lt;p&gt;ARM tablets are more complicated because they lack UEFI and driver support is fragmented. In general, you can try Mobian (Debian), postmarketOS, Ubuntu touch, and similar systems. More niche options include Arch Linux ARM and Fedora Mobile.&lt;/p&gt;

&lt;h2 class="relative group"&gt;2. Desktop Environment Choice
 &lt;div id="2-desktop-environment-choice" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#2-desktop-environment-choice" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Personally, I do not think any Linux desktop environment handles both “laptop mode” and “tablet mode” well at the same time. Switching back and forth between two modes inside the same interface is not a wise idea. It should be divided by session, so I install two desktop environments. Linux Display Managers allow multiple desktop environments to be available at login, so I choose the appropriate desktop based on the mode I need at that moment.&lt;/p&gt;
&lt;p&gt;There are many Linux desktop environments. At this point Wayland is better; X11 has fallen behind the times. After testing various desktops, I found that GNOME 50 + Phosh is still the best fit for this convertible tablet setup. KDE Plasma 6 is close, but not good enough; it is suitable mainly for keyboard operation. As for the Cosmic desktop, I am still waiting to see how it develops.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Taking Debian as an example, install GNOME and Phosh from the official repository. Some distros already preinstall GNOME, so you only need to add Phosh.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt install gnome phosh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;Use GDM as the display manager, so after booting you can switch desktop environments from the login screen:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; gdm&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;
&lt;p&gt;First, the GNOME desktop handles desktop computer mode, meaning when the tablet is connected to a keyboard. Occasional touch input is fine too. Phosh’s one-app-one-screen model does not fit traditional desktop multitasking, and Phosh is not compatible with GNOME extensions. This is where GNOME takes the stage. I use this mode for taking notes, browsing the web, and remote development. If you are not familiar with GNOME’s interaction model, read this first: &lt;a href="https://ivonblog.com/posts/how-to-use-gnome/" target="_blank" rel="noreferrer"&gt;How to Use the Linux GNOME Desktop: Understanding Its Design Philosophy and Interaction Model&lt;/a&gt;
&lt;figure&gt;
 &lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://static.ivonblog.com/posts/my-gnu-linux-tablet-setup/images/gnome.webp"
 onerror="this.onerror=null;this.src='https://ivonblog.com/images/unable-to-load-the-image-pepe.webp'"
 &gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The built-in on-screen keyboard can be enabled in GNOME Settings, but it is not good enough. I recommend installing the &lt;a href="https://ivonblog.com/posts/linux-on-screen-keyboard/" target="_blank" rel="noreferrer"&gt;GJS-OSK&lt;/a&gt; floating keyboard, which can work with Fcitx5 for Chinese input. At the moment it only supports Hanyu Pinyin.
&lt;figure&gt;
 &lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://static.ivonblog.com/posts/my-gnu-linux-tablet-setup/images/osk.webp"
 onerror="this.onerror=null;this.src='https://ivonblog.com/images/unable-to-load-the-image-pepe.webp'"
 &gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Because a tablet is not always plugged in, whether I use GNOME or Phosh, I set automatic suspend after a period of inactivity under System Settings -&amp;gt; Power Management. If I need to temporarily disable automatic suspend, I install the Caffeine extension, which adds a button in GNOME’s top-right menu. GNOME also uses Power Profile Daemon to control system power usage, and the power mode can likewise be adjusted from the top-right menu.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;On the other hand, the Phosh desktop handles pure touch mode, meaning when I am holding the tablet and reading ebooks or papers. Phosh animations are noticeably smoother, gestures are optimized for touch devices, and it sticks to the one-app-one-window concept with a global keyboard. Good enough.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Tip: In Phosh 0.35.0 and later, you need to long-press the pill bar at the bottom of the screen to summon the keyboard. The keyboard’s Terminal layout can bring up the Fcitx5 Pinyin input method.
&lt;img src="https://static.ivonblog.com/posts/my-gnu-linux-tablet-setup/images/phosh.webp" width=300&gt;&lt;/p&gt;
&lt;p&gt;When a keyboard is connected, Phosh automatically enters Docked Mode. In this mode, windows can overlap, and their position and size can be adjusted by dragging.&lt;/p&gt;
&lt;p&gt;Phosh may make GNOME app window minimize and maximize buttons disappear. You can automatically restore them by adding the following &lt;code&gt;gsettings&lt;/code&gt; command to &lt;code&gt;~/.profile&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$XDG_CURRENT_DESKTOP&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; *&lt;span class="s2"&gt;&amp;#34;GNOME&amp;#34;&lt;/span&gt;* &lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; gsettings &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;org.gnome.desktop.wm.preferences&amp;#34;&lt;/span&gt; button-layout &lt;span class="s2"&gt;&amp;#34;appmenu:minimize,maximize,close&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;fi&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 class="relative group"&gt;3. The Auto-Rotation Problem
 &lt;div id="3-the-auto-rotation-problem" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#3-the-auto-rotation-problem" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Most tablets have a built-in accelerometer to detect screen orientation.&lt;/p&gt;
&lt;p&gt;Wayland desktops handle this better. X11 desktops do not.&lt;/p&gt;
&lt;p&gt;For GNOME and KDE Plasma desktop environments, install the &lt;code&gt;iio-sensor-proxy&lt;/code&gt; package and the screen will rotate automatically:&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt install iio-sensor-proxy
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; --now iio-sensor-proxy&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 class="relative group"&gt;4. Commonly Used Apps
 &lt;div id="4-commonly-used-apps" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#4-commonly-used-apps" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;See &lt;a href="https://ivonblog.com/posts/linux-recommended-application/" target="_blank" rel="noreferrer"&gt;Recommended Linux Applications&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The number of Linux applications designed for touch devices is increasing, but the mainstream is still keyboard-first. So many tasks are probably best done inside a browser.&lt;/p&gt;
&lt;p&gt;Even though I use the GNOME desktop, I still use many KDE apps.&lt;/p&gt;
&lt;p&gt;Partial list:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GJS-OSK: a GNOME extension and a better on-screen keyboard.&lt;/li&gt;
&lt;li&gt;Caffeine: a GNOME extension that temporarily prevents the computer from automatically entering suspend.&lt;/li&gt;
&lt;li&gt;GSConnect: a GNOME extension, similar to KDE Connect, for file transfer and notification sync.&lt;/li&gt;
&lt;li&gt;Firefox: I recommend enabling vertical tabs. You can pinch to zoom.&lt;/li&gt;
&lt;li&gt;Chromium-based browsers: Chrome and Brave, for example. They have good mouse and touchscreen support, can go back with gestures, and support pinch-to-zoom.&lt;/li&gt;
&lt;li&gt;Dolphin: a multifunction file manager with touch operation support.&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Drawing&amp;rdquo; by maoschanz: touch-friendly photo editing.&lt;/li&gt;
&lt;li&gt;Krita: drawing and image editing software.&lt;/li&gt;
&lt;li&gt;Gwenview: photo viewer and album app. If you want a mobile-optimized interface, KDE Koko is also an option, but I find it hard to use.&lt;/li&gt;
&lt;li&gt;VLC: video player.&lt;/li&gt;
&lt;li&gt;Okular: for reading and annotating PDFs. Fast and packed with features.&lt;/li&gt;
&lt;li&gt;KOReader: lightweight PDF reader.&lt;/li&gt;
&lt;li&gt;Joplin Desktop: for Markdown notes and handwritten notes.&lt;/li&gt;
&lt;li&gt;Rnote: handwritten notes and PDF annotation, more stable than Xournal++.&lt;/li&gt;
&lt;li&gt;EasyEffects + Auto Gain Presets: equalizer for tablet speakers.&lt;/li&gt;
&lt;li&gt;LocalSend: a more stable Wi-Fi file transfer solution.&lt;/li&gt;
&lt;li&gt;Moonlight Game Streaming: remote desktop and gaming.&lt;/li&gt;
&lt;li&gt;Visual Studio Code: universal text editor. If it feels too bloated, install Zed.&lt;/li&gt;
&lt;li&gt;Vim: terminal text editor.&lt;/li&gt;
&lt;li&gt;Konsole: a terminal that supports keyboard and touch operation.&lt;/li&gt;
&lt;li&gt;Fcitx5: Chinese input method. Most of the time I use Zhuyin input when typing with a connected keyboard. For touch input, you need to learn Pinyin.&lt;/li&gt;
&lt;li&gt;Flatpak: convenient for installing newer software. Since apps bundle drivers and dependencies with themselves, they are less affected by system updates.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;5. Run Android Apps with Waydroid
 &lt;div id="5-run-android-apps-with-waydroid" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#5-run-android-apps-with-waydroid" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Running Android apps after going through all this effort to use Linux is strange, but having an Android environment is still convenient when you temporarily need one.&lt;/p&gt;
&lt;p&gt;For detailed Waydroid usage, see: &lt;a href="https://ivonblog.com/posts/ubuntu-waydroid/" target="_blank" rel="noreferrer"&gt;Waydroid Tutorial&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Install the proprietary app &lt;a href="https://play.google.com/store/apps/details?id=org.crape.rotationcontrol&amp;amp;hl=zh_TW" target="_blank" rel="noreferrer"&gt;Rotation Control&lt;/a&gt; to manually control Android screen orientation. If you rotate the GNOME screen, the Waydroid window gets sliced in half. So the best workflow is to disable GNOME auto-rotation and manually rotate the screen inside Waydroid’s app.&lt;/p&gt;
&lt;p&gt;Waydroid can receive mouse, keyboard, touch, and stylus input. It even detects pen pressure. Fancy, for a container pretending to be a phone.&lt;/p&gt;</content:encoded><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://ivonblog.com/en-us/posts/my-gnu-linux-tablet-setup/featured.webp"/></item><item><title>How to Install GNU/Linux on the Surface Go 2 and Make a Low-End Tablet Less Miserable</title><link>https://ivonblog.com/en-us/posts/install-linux-on-surface-go-2/</link><pubDate>Tue, 02 Dec 2025 22:00:00 +0800</pubDate><author>infoivonblog.nkfjt@aleeas.com (Ivon Huang)</author><guid>https://ivonblog.com/en-us/posts/install-linux-on-surface-go-2/</guid><description>&lt;!-- Co-translated by ChatGPT --&gt;
&lt;p&gt;Here is how to install a GNU/Linux system on the Surface Go 2.
&lt;figure&gt;
 &lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://static.ivonblog.com/posts/install-linux-on-surface-go-2/images/11.webp"
 onerror="this.onerror=null;this.src='https://ivonblog.com/images/unable-to-load-the-image-pepe.webp'"
 &gt;&lt;/figure&gt;

&lt;figure&gt;
 &lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://static.ivonblog.com/posts/install-linux-on-surface-go-2/images/11-2.webp"
 onerror="this.onerror=null;this.src='https://ivonblog.com/images/unable-to-load-the-image-pepe.webp'"
 &gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.pixiv.net/artworks/73088224" target="_blank" rel="noreferrer"&gt;Wallpaper source&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In Microsoft’s Surface tablet family, the Surface Go line is the low-to-mid-range option. The processors are entry-level across the board. No matter how much Microsoft tunes things, it cannot change the fact that Windows 10 wheezes on this thing: battery life is mediocre, the chassis gets warm easily, the CPU casually hits 100%, and Windows system files eat a silly amount of disk space.
&lt;figure&gt;
 &lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://static.ivonblog.com/posts/install-linux-on-surface-go-2/images/22.webp"
 onerror="this.onerror=null;this.src='https://ivonblog.com/images/unable-to-load-the-image-pepe.webp'"
 &gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;If we install Linux on it instead, the user experience improves to some extent. Look at that: a freshly installed Linux system takes less than 10GB of disk space, and RAM usage after boot is around 1GB.
&lt;figure&gt;
 &lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://static.ivonblog.com/posts/install-linux-on-surface-go-2/images/33.webp"
 onerror="this.onerror=null;this.src='https://ivonblog.com/images/unable-to-load-the-image-pepe.webp'"
 &gt;&lt;/figure&gt;
&lt;/p&gt;</description><content:encoded>&lt;!-- Co-translated by ChatGPT --&gt;
&lt;p&gt;Here is how to install a GNU/Linux system on the Surface Go 2.
&lt;figure&gt;
 &lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://static.ivonblog.com/posts/install-linux-on-surface-go-2/images/11.webp"
 onerror="this.onerror=null;this.src='https://ivonblog.com/images/unable-to-load-the-image-pepe.webp'"
 &gt;&lt;/figure&gt;

&lt;figure&gt;
 &lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://static.ivonblog.com/posts/install-linux-on-surface-go-2/images/11-2.webp"
 onerror="this.onerror=null;this.src='https://ivonblog.com/images/unable-to-load-the-image-pepe.webp'"
 &gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.pixiv.net/artworks/73088224" target="_blank" rel="noreferrer"&gt;Wallpaper source&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In Microsoft’s Surface tablet family, the Surface Go line is the low-to-mid-range option. The processors are entry-level across the board. No matter how much Microsoft tunes things, it cannot change the fact that Windows 10 wheezes on this thing: battery life is mediocre, the chassis gets warm easily, the CPU casually hits 100%, and Windows system files eat a silly amount of disk space.
&lt;figure&gt;
 &lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://static.ivonblog.com/posts/install-linux-on-surface-go-2/images/22.webp"
 onerror="this.onerror=null;this.src='https://ivonblog.com/images/unable-to-load-the-image-pepe.webp'"
 &gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;If we install Linux on it instead, the user experience improves to some extent. Look at that: a freshly installed Linux system takes less than 10GB of disk space, and RAM usage after boot is around 1GB.
&lt;figure&gt;
 &lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://static.ivonblog.com/posts/install-linux-on-surface-go-2/images/33.webp"
 onerror="this.onerror=null;this.src='https://ivonblog.com/images/unable-to-load-the-image-pepe.webp'"
 &gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Most Surface tablets are x86 devices using Intel processors. They have standard UEFI, and Intel has contributed actively to upstream Linux, so Linux distro support is generally solid.&lt;/p&gt;
&lt;p&gt;For the Surface-specific drivers, the linux-surface project also provides a custom kernel to improve compatibility.&lt;/p&gt;
&lt;p&gt;Most Surface features work normally on Linux, including the touchscreen, keyboard, MPP stylus, automatic rotation, automatic brightness, suspend, VA-API video decoding acceleration, and so on.
&lt;figure&gt;
 &lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://static.ivonblog.com/posts/install-linux-on-surface-go-2/images/44.webp"
 onerror="this.onerror=null;this.src='https://ivonblog.com/images/unable-to-load-the-image-pepe.webp'"
 &gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Because Linux desktops are relatively lightweight, using the extra resources for light Steam games is perfectly viable.
&lt;figure&gt;
 &lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://static.ivonblog.com/posts/install-linux-on-surface-go-2/images/55.webp"
 onerror="this.onerror=null;this.src='https://ivonblog.com/images/unable-to-load-the-image-pepe.webp'"
 &gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;We can also run Android apps nearly seamlessly through a Waydroid container.
&lt;figure&gt;
 &lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://static.ivonblog.com/posts/install-linux-on-surface-go-2/images/66.webp"
 onerror="this.onerror=null;this.src='https://ivonblog.com/images/unable-to-load-the-image-pepe.webp'"
 &gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;As for battery life, it depends on which apps you run. With ordinary web browsing and typing in Chromium, the Surface Go 2 running Linux lasts about 5 hours, which trades blows with Windows. After all, Surface hardware is designed for Windows; Linux kernel scheduling is not going to beat Microsoft on Microsoft’s own turf.
&lt;figure&gt;
 &lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://static.ivonblog.com/posts/install-linux-on-surface-go-2/images/battery-life.webp"
 onerror="this.onerror=null;this.src='https://ivonblog.com/images/unable-to-load-the-image-pepe.webp'"
 &gt;&lt;/figure&gt;
&lt;/p&gt;

&lt;h2 class="relative group"&gt;1. Prerequisites
 &lt;div id="1-prerequisites" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#1-prerequisites" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Here I use the Wi-Fi version of the Surface Go 2 (Intel Pentium 4425Y, 4G/64G) as the demo machine.&lt;/p&gt;
&lt;p&gt;For the state of Linux hardware support on Surface devices, see this table on GitHub: &lt;a href="https://github.com/linux-surface/linux-surface/wiki/Supported-Devices-and-Features#feature-matrix" target="_blank" rel="noreferrer"&gt;Supported Devices and Features&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;At the time of writing, the biggest problem with the Surface Go 2 is poor camera quality. The Intel IPU3 camera barely works, and photo quality on Linux is nowhere near as good as on Windows. The camera also depends on libcamera and PipeWire. Only Firefox can access it directly; other apps need v4l2loopback to fake a device. Room for future improvement, as people say when the thing is not good yet.
&lt;figure&gt;
 &lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://static.ivonblog.com/posts/install-linux-on-surface-go-2/images/wvl.webp"
 onerror="this.onerror=null;this.src='https://ivonblog.com/images/unable-to-load-the-image-pepe.webp'"
 &gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;If possible, update Windows to the latest version first, including UEFI firmware. The UEFI updater may not be usable from Linux.&lt;/p&gt;

&lt;h2 class="relative group"&gt;2. Create the Linux Boot Drive
 &lt;div id="2-create-the-linux-boot-drive" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#2-create-the-linux-boot-drive" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Which Linux distro should you use? Any x86 Linux distro is fair game, including Debian, Ubuntu, Fedora, Arch Linux, openSUSE, Gentoo, and postmarketOS. It depends on personal preference and what you want the machine to do. If you want stability, pick Debian or Ubuntu; if you want newer features, pick Fedora or Arch Linux.&lt;/p&gt;
&lt;p&gt;Here I chose Fedora Linux. You get newer software, but it is a bit less stable. For the desktop environment, I picked KDE Plasma, which provides a full desktop UI and an on-screen keyboard. This way the Surface Go can work as both a laptop and a tablet. If you lean more toward tablet-style use and do not plan to use a physical keyboard, the default GNOME desktop is probably better.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Before installing Linux, it is best to use Windows Update to update the system and firmware to the latest versions. Linux may not be able to download those updates.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Download the ISO from the &lt;a href="https://www.fedoraproject.org" target="_blank" rel="noreferrer"&gt;Fedora&lt;/a&gt; website and choose the KDE desktop edition.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Then use &lt;a href="https://ivonblog.com/posts/ventoy-installation/" target="_blank" rel="noreferrer"&gt;Ventoy&lt;/a&gt; to create a boot drive.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Since the Surface Go 2 only has a Type-C port, you may need a Type-C hub to plug in the USB drive. The Surface Go 2 cannot boot from an SD card.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 class="relative group"&gt;3. Install Linux
 &lt;div id="3-install-linux" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#3-install-linux" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Shut down the Surface Go 2.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Hold the power button and volume-up button to enter UEFI. This interface supports touch, so you do not need to connect a keyboard here, though you may still need a physical keyboard later during installation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Although Fedora supports Secure Boot, I still recommend disabling Secure Boot so you do not have to manually sign drivers later.
&lt;figure&gt;
 &lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://static.ivonblog.com/posts/install-linux-on-surface-go-2/images/77.webp"
 onerror="this.onerror=null;this.src='https://ivonblog.com/images/unable-to-load-the-image-pepe.webp'"
 &gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Set the boot order to the USB drive.
&lt;figure&gt;
 &lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://static.ivonblog.com/posts/install-linux-on-surface-go-2/images/88.webp"
 onerror="this.onerror=null;this.src='https://ivonblog.com/images/unable-to-load-the-image-pepe.webp'"
 &gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Boot and follow the on-screen instructions. Choose to erase the entire disk and install Fedora.
&lt;figure&gt;
 &lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://static.ivonblog.com/posts/install-linux-on-surface-go-2/images/99.webp"
 onerror="this.onerror=null;this.src='https://ivonblog.com/images/unable-to-load-the-image-pepe.webp'"
 &gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For Chinese input, install Fcitx5:&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo dnf install fcitx5 fcitx5-chinese-addons fcitx5-chewing fcitx5-gtk3 fcitx5-gtk4 fcitx5-qt fcitx5-qt6 fcitx5-configtool&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start="7"&gt;
&lt;li&gt;Tip: Fedora enables zRAM by default. If your Surface Go has too little RAM, edit &lt;code&gt;/etc/systemd/zram-generator.conf&lt;/code&gt; and increase the SWAP value to expand usable memory. The unit is MB.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;zram0&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;zram-size &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;8192&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 class="relative group"&gt;4. Install the linux-surface Kernel
 &lt;div id="4-install-the-linux-surface-kernel" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#4-install-the-linux-surface-kernel" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;The linux-surface kernel includes driver packages and patches specifically for Surface hardware. Some of these have already been merged upstream. As of Linux 6.12 and later, the kernel already includes most Surface Go 2 drivers. If you do not have a specific need, you can skip this.&lt;/p&gt;
&lt;p&gt;For users of stable-release distros like Debian and Ubuntu, installing a third-party maintained linux-surface kernel can make the system less stable. If all hardware features work normally, just use the kernel provided by your distro.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Install it according to the &lt;a href="https://github.com/linux-surface/linux-surface/wiki/Installation-and-Setup" target="_blank" rel="noreferrer"&gt;GitHub&lt;/a&gt; instructions. On Fedora, add the package repository maintained by the linux-surface team:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo dnf config-manager &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; addrepo --from-repofile&lt;span class="o"&gt;=&lt;/span&gt;https://pkg.surfacelinux.com/fedora/linux-surface.repo&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;Then install the linux-surface kernel and reboot:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo dnf install --allowerasing kernel-surface iptsd libwacom-surface&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;Check whether the current kernel switched successfully. It should show &lt;code&gt;linux-surface&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uname -a&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start="4"&gt;
&lt;li&gt;Fedora updates its system kernel fairly often, so a newer kernel may override the linux-surface kernel. After installing the linux-surface package, the &lt;code&gt;linux-surface-default-watchdog.path&lt;/code&gt; service is enabled automatically to make sure the system boots with the linux-surface kernel.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 class="relative group"&gt;5. Using the On-Screen Keyboard on KDE
 &lt;div id="5-using-the-on-screen-keyboard-on-kde" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#5-using-the-on-screen-keyboard-on-kde" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;When no physical keyboard is connected, KDE Plasma automatically enters tablet mode.&lt;/p&gt;
&lt;p&gt;The built-in on-screen keyboard in KDE Plasma 6 is Maliit Keyboard. It supports English and Chinese input, has plenty of bugs, and lands squarely in the “barely usable, but usable” category.&lt;/p&gt;
&lt;p&gt;Enable it under System Settings -&amp;gt; Keyboard -&amp;gt; Virtual Keyboard. Note that this keyboard cannot be used together with Fcitx5.
&lt;figure&gt;
 &lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://static.ivonblog.com/posts/install-linux-on-surface-go-2/images/100.webp"
 onerror="this.onerror=null;this.src='https://ivonblog.com/images/unable-to-load-the-image-pepe.webp'"
 &gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Then tap a text field on the screen, and the keyboard should appear.
&lt;figure&gt;
 &lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://static.ivonblog.com/posts/install-linux-on-surface-go-2/images/101.webp"
 onerror="this.onerror=null;this.src='https://ivonblog.com/images/unable-to-load-the-image-pepe.webp'"
 &gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;KDE’s System Settings can customize touch gestures. For example, I set a swipe from the left edge of the screen to open the overview of all windows.
&lt;figure&gt;
 &lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://static.ivonblog.com/posts/install-linux-on-surface-go-2/images/102.webp"
 onerror="this.onerror=null;this.src='https://ivonblog.com/images/unable-to-load-the-image-pepe.webp'"
 &gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;That said, KDE Plasma desktop mode still needs a keyboard and mouse most of the time.&lt;/p&gt;
&lt;p&gt;If you want pure touch operation, I recommend installing the plasma-mobile or Phosh desktop environment:&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo dnf install plasma-mobile&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;You can switch to the “Plasma Mobile” desktop environment from the login screen.
&lt;figure&gt;
 &lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://static.ivonblog.com/posts/install-linux-on-surface-go-2/images/104.webp"
 onerror="this.onerror=null;this.src='https://ivonblog.com/images/unable-to-load-the-image-pepe.webp'"
 &gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Plasma Mobile gives you an Android-tablet-like experience. Some of its configuration is shared with KDE Plasma.
&lt;figure&gt;
 &lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://static.ivonblog.com/posts/install-linux-on-surface-go-2/images/105.webp"
 onerror="this.onerror=null;this.src='https://ivonblog.com/images/unable-to-load-the-image-pepe.webp'"
 &gt;&lt;/figure&gt;

&lt;figure&gt;
 &lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://static.ivonblog.com/posts/install-linux-on-surface-go-2/images/106.webp"
 onerror="this.onerror=null;this.src='https://ivonblog.com/images/unable-to-load-the-image-pepe.webp'"
 &gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;In the plasma-mobile system settings, you can enable Pinyin and Zhuyin input methods.
&lt;figure&gt;
 &lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://static.ivonblog.com/posts/install-linux-on-surface-go-2/images/103.webp"
 onerror="this.onerror=null;this.src='https://ivonblog.com/images/unable-to-load-the-image-pepe.webp'"
 &gt;&lt;/figure&gt;
&lt;/p&gt;</content:encoded><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://ivonblog.com/en-us/posts/install-linux-on-surface-go-2/featured.webp"/></item></channel></rss>