<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: PlexyDesk</title>
    <description>The latest articles on DEV Community by PlexyDesk (@plexydesk).</description>
    <link>https://dev.to/plexydesk</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3707521%2Fbcb15ffd-cf63-4250-b078-e84d7c07eb3e.png</url>
      <title>DEV Community: PlexyDesk</title>
      <link>https://dev.to/plexydesk</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/plexydesk"/>
    <language>en</language>
    <item>
      <title>How To Fix a Quectel EM120R-GL LTE Modem On Ubuntu</title>
      <dc:creator>PlexyDesk</dc:creator>
      <pubDate>Thu, 26 Mar 2026 17:34:13 +0000</pubDate>
      <link>https://dev.to/plexydesk/how-to-fix-a-quectel-em120r-gl-lte-modem-on-ubuntu-54g9</link>
      <guid>https://dev.to/plexydesk/how-to-fix-a-quectel-em120r-gl-lte-modem-on-ubuntu-54g9</guid>
      <description>&lt;p&gt;This guide documents a working fix for a Quectel &lt;code&gt;EM120R-GL&lt;/code&gt; PCIe LTE modem on a Debian/Ubuntu style Linux system using NetworkManager and ModemManager.&lt;/p&gt;

&lt;p&gt;It was validated on a machine with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Quectel &lt;code&gt;EM120R-GL&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Device ID &lt;code&gt;1eac:1001&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;A Sri Lanka &lt;code&gt;SLTMobitel&lt;/code&gt; SIM&lt;/li&gt;
&lt;li&gt;&lt;code&gt;NetworkManager&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ModemManager&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The same pattern may also apply to other Quectel MBIM modems that are &lt;code&gt;fcc-locked&lt;/code&gt; on Linux.&lt;/p&gt;

&lt;h2&gt;
  
  
  Symptoms
&lt;/h2&gt;

&lt;p&gt;The modem is physically present, but mobile data does not come up on Linux even though the same SIM and modem work in Windows.&lt;/p&gt;

&lt;p&gt;Typical signs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;lspci -nn&lt;/code&gt; shows the modem, for example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;05:00.0 Unassigned class &lt;span class="o"&gt;[&lt;/span&gt;ff00]: Quectel Wireless Solutions Co., Ltd. EM120R-GL LTE Modem &lt;span class="o"&gt;[&lt;/span&gt;1eac:1001]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;mmcli -L&lt;/code&gt; shows no modem because &lt;code&gt;ModemManager&lt;/code&gt; is not running, or it shows the modem but activation fails.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;nmcli device status&lt;/code&gt; shows the WWAN device as disconnected or stuck connecting.&lt;/li&gt;
&lt;li&gt;The ModemManager journal shows repeated messages like:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;couldn't enable interface: 'Invalid transition'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;The raw Quectel MBIM vendor state shows:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;mbimcli &lt;span class="nt"&gt;-d&lt;/span&gt; /dev/wwan0mbim0 &lt;span class="nt"&gt;--quectel-query-radio-state&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and returns:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Radio state retrieved: 'fcc-locked'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Root Cause
&lt;/h2&gt;

&lt;p&gt;On Debian/Ubuntu-style systems, ModemManager ships FCC unlock scripts for some integrated WWAN devices, but they are not always enabled by default.&lt;/p&gt;

&lt;p&gt;For this modem, Linux saw the hardware and the MBIM ports correctly, but the modem radio stayed &lt;code&gt;fcc-locked&lt;/code&gt;. That prevented the software radio from turning on, which caused ModemManager to loop with &lt;code&gt;Invalid transition&lt;/code&gt; errors.&lt;/p&gt;

&lt;p&gt;In this case, the &lt;code&gt;sim-pin2&lt;/code&gt; status reported by ModemManager was not the real blocker. Data started working once the FCC lock was cleared.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Make Sure ModemManager Is Installed and Running
&lt;/h2&gt;

&lt;p&gt;Check package and service state:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dpkg &lt;span class="nt"&gt;-l&lt;/span&gt; | rg &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s1"&gt;'modemmanager|network-manager|libmbim|libqmi'&lt;/span&gt;
systemctl status ModemManager &lt;span class="nt"&gt;--no-pager&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If ModemManager is installed but inactive, enable it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; &lt;span class="nt"&gt;--now&lt;/span&gt; ModemManager
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify the modem appears:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mmcli &lt;span class="nt"&gt;-L&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 2: Confirm the FCC Lock
&lt;/h2&gt;

&lt;p&gt;Check the modem and raw MBIM radio state:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mmcli &lt;span class="nt"&gt;-m&lt;/span&gt; 0
&lt;span class="nb"&gt;sudo &lt;/span&gt;mbimcli &lt;span class="nt"&gt;-d&lt;/span&gt; /dev/wwan0mbim0 &lt;span class="nt"&gt;--quectel-query-radio-state&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;mbimcli &lt;span class="nt"&gt;-d&lt;/span&gt; /dev/wwan0mbim0 &lt;span class="nt"&gt;--query-radio-state&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the vendor radio state says &lt;code&gt;fcc-locked&lt;/code&gt;, continue.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Enable the Quectel FCC Unlock Hook
&lt;/h2&gt;

&lt;p&gt;On Debian/Ubuntu systems, the Quectel FCC unlock helper is usually already installed in:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/usr/share/ModemManager/fcc-unlock.available.d/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For the &lt;code&gt;EM120R-GL&lt;/code&gt; device ID &lt;code&gt;1eac:1001&lt;/code&gt;, enable it with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo ln&lt;/span&gt; &lt;span class="nt"&gt;-sfn&lt;/span&gt; /usr/share/ModemManager/fcc-unlock.available.d/1eac:1001 &lt;span class="se"&gt;\&lt;/span&gt;
  /etc/ModemManager/fcc-unlock.d/1eac:1001
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then restart ModemManager:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart ModemManager
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 4: Verify the Modem Registers on the Mobile Network
&lt;/h2&gt;

&lt;p&gt;After restart, check:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mmcli &lt;span class="nt"&gt;-m&lt;/span&gt; 0
&lt;span class="nb"&gt;sudo &lt;/span&gt;mbimcli &lt;span class="nt"&gt;-d&lt;/span&gt; /dev/wwan0mbim0 &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="nt"&gt;--quectel-query-radio-state&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You want to see:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;modem &lt;code&gt;state: registered&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;power state: on&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;operator name: SLTMobitel&lt;/code&gt; or your carrier&lt;/li&gt;
&lt;li&gt;&lt;code&gt;packet service state: attached&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Quectel radio state &lt;code&gt;on&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 5: Bring Up the Mobile Connection
&lt;/h2&gt;

&lt;p&gt;If NetworkManager already created a profile, activate it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nmcli connection show
nmcli connection up &lt;span class="s1"&gt;'Mobitel 4G'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If needed, re-enable autoconnect:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nmcli connection modify &lt;span class="s1"&gt;'Mobitel 4G'&lt;/span&gt; connection.autoconnect &lt;span class="nb"&gt;yes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you need to create a profile manually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nmcli connection add &lt;span class="nb"&gt;type &lt;/span&gt;gsm ifname &lt;span class="s1"&gt;'*'&lt;/span&gt; con-name &lt;span class="s1"&gt;'Mobitel 4G'&lt;/span&gt; apn mobitel
nmcli connection up &lt;span class="s1"&gt;'Mobitel 4G'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 6: Verify Real Internet Traffic Over WWAN
&lt;/h2&gt;

&lt;p&gt;Check address assignment:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nmcli &lt;span class="nt"&gt;-f&lt;/span&gt; GENERAL.STATE,GENERAL.CONNECTION,IP4.ADDRESS,IP4.GATEWAY,IP4.DNS,IP6.ADDRESS device show wwan0mbim0
ip addr show wwan0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Force a test over the WWAN data interface:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-4&lt;/span&gt; &lt;span class="nt"&gt;--interface&lt;/span&gt; wwan0 https://ifconfig.me/ip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If that returns a public IP, mobile data is working.&lt;/p&gt;

&lt;h2&gt;
  
  
  Notes About Routing
&lt;/h2&gt;

&lt;p&gt;If Wi-Fi is also connected, Linux may keep Wi-Fi as the default IPv4 route while the WWAN link is still healthy and usable.&lt;/p&gt;

&lt;p&gt;Check default routes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip route show default
ip &lt;span class="nt"&gt;-6&lt;/span&gt; route show default
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you want the SIM to be the preferred route even while Wi-Fi is up, you can either disconnect Wi-Fi or lower the WWAN route metric in NetworkManager.&lt;/p&gt;

&lt;h2&gt;
  
  
  Useful Diagnostics
&lt;/h2&gt;

&lt;p&gt;These commands were useful during diagnosis:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;lspci &lt;span class="nt"&gt;-nn&lt;/span&gt;
lspci &lt;span class="nt"&gt;-k&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; 05:00.0
ip &lt;span class="nb"&gt;link &lt;/span&gt;show
rfkill list all
nmcli general status
nmcli device status
mmcli &lt;span class="nt"&gt;-L&lt;/span&gt;
mmcli &lt;span class="nt"&gt;-m&lt;/span&gt; 0
mmcli &lt;span class="nt"&gt;-i&lt;/span&gt; 0
journalctl &lt;span class="nt"&gt;-u&lt;/span&gt; ModemManager &lt;span class="nt"&gt;-u&lt;/span&gt; NetworkManager &lt;span class="nt"&gt;-b&lt;/span&gt; &lt;span class="nt"&gt;--no-pager&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;mbimcli &lt;span class="nt"&gt;-d&lt;/span&gt; /dev/wwan0mbim0 &lt;span class="nt"&gt;--query-radio-state&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;mbimcli &lt;span class="nt"&gt;-d&lt;/span&gt; /dev/wwan0mbim0 &lt;span class="nt"&gt;--quectel-query-radio-state&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;mbimcli &lt;span class="nt"&gt;-d&lt;/span&gt; /dev/wwan0mbim0 &lt;span class="nt"&gt;--query-pin-state&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why It Worked in Windows but Not Linux
&lt;/h2&gt;

&lt;p&gt;Windows often ships vendor integration that clears the regulatory lock automatically for laptop-integrated WWAN modules.&lt;/p&gt;

&lt;p&gt;Linux had all the right drivers here:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mhi-pci-generic&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mhi_wwan_mbim&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mhi_wwan_ctrl&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;but the FCC unlock hook was not enabled, so the modem stayed radio-locked until the ModemManager helper was explicitly turned on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Persistent Fix Summary
&lt;/h2&gt;

&lt;p&gt;The persistent fix was:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; &lt;span class="nt"&gt;--now&lt;/span&gt; ModemManager
&lt;span class="nb"&gt;sudo ln&lt;/span&gt; &lt;span class="nt"&gt;-sfn&lt;/span&gt; /usr/share/ModemManager/fcc-unlock.available.d/1eac:1001 &lt;span class="se"&gt;\&lt;/span&gt;
  /etc/ModemManager/fcc-unlock.d/1eac:1001
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart ModemManager
nmcli connection modify &lt;span class="s1"&gt;'Mobitel 4G'&lt;/span&gt; connection.autoconnect &lt;span class="nb"&gt;yes
&lt;/span&gt;nmcli connection up &lt;span class="s1"&gt;'Mobitel 4G'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After that, the modem registered on LTE and internet traffic over &lt;code&gt;wwan0&lt;/code&gt; worked normally.&lt;/p&gt;

&lt;p&gt;if this article helped you in anyway donate to support our work : &lt;a href="https://buymeacoffee.com/plexydesk" rel="noopener noreferrer"&gt;https://buymeacoffee.com/plexydesk&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cli</category>
      <category>linux</category>
      <category>networking</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Starting on new file manager for for PlexyDesk</title>
      <dc:creator>PlexyDesk</dc:creator>
      <pubDate>Fri, 06 Mar 2026 06:19:10 +0000</pubDate>
      <link>https://dev.to/plexydesk/starting-on-new-file-manager-for-for-plexydesk-218f</link>
      <guid>https://dev.to/plexydesk/starting-on-new-file-manager-for-for-plexydesk-218f</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcr1pzil6cy5a6gdhzvhf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcr1pzil6cy5a6gdhzvhf.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>GPU-accelerated desktop compositor for Linux - No it's not Wayland or X11</title>
      <dc:creator>PlexyDesk</dc:creator>
      <pubDate>Wed, 25 Feb 2026 16:44:11 +0000</pubDate>
      <link>https://dev.to/plexydesk/gpu-accelerated-desktop-compositor-for-linux-no-its-not-wayland-or-x11-19g</link>
      <guid>https://dev.to/plexydesk/gpu-accelerated-desktop-compositor-for-linux-no-its-not-wayland-or-x11-19g</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fehcz12x7ujdn14w7vek4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fehcz12x7ujdn14w7vek4.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;PlexyDesk&lt;/strong&gt;. A display server and desktop shell written in C/C++ that renders everything with OpenGL SDF shaders, real-time Gaussian blur, glass materials with refraction and chromatic aberration. The goal: macOS-level visual polish on Linux, without bolting effects onto an existing compositor.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does today
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Glass materials&lt;/strong&gt; : multi-level blur, fresnel rim lighting, and refraction&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SDF rendering&lt;/strong&gt; : resolution-independent rounded rects, per-corner radius, elevation shadows&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;macOS-style dock&lt;/strong&gt; : icon magnification, bounce-to-launch, running indicators&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Genie minimize&lt;/strong&gt; | GPU mesh deformation, just like macOS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Window physics&lt;/strong&gt; | cloth simulation with spring damping - compiz like&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Widget toolkit&lt;/strong&gt; | buttons, sliders, text input, flexbox layout — all GPU-rendered&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero-copy buffer sharing&lt;/strong&gt; | clients submit DMA-BUF frames, no copies&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;X11 app support&lt;/strong&gt; | Firefox, GTK apps, etc. via integrated Xwayland &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;PlexyDesk implements its own display protocol optimized for GPU-rendered UI. Clients render locally using &lt;code&gt;libplexycanvas&lt;/code&gt; (SDF shaders, FreeType text, flexbox layout) and submit frames over Unix sockets. A client crash doesn't take down the compositor.&lt;/p&gt;

&lt;p&gt;It's reaching the point where real apps run on it. Firefox works. GTK apps work. The dock launches apps. Windows minimize with a genie effect. There's still a lot to do  but the hard parts (the protocol, buffer sharing, the rendering pipeline) are working.&lt;/p&gt;

&lt;p&gt;I'm building this in the open and would love feedback from anyone interested in Linux graphics, compositor internals, or just making Linux desktops look better.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Star the repo, open issues, or just say hi on discord [&lt;a href="https://discord.gg/7ckXmcns" rel="noopener noreferrer"&gt;https://discord.gg/7ckXmcns&lt;/a&gt;] I'll be posting build logs here as the project progresses.&lt;/strong&gt; and to read more about plexydesk visit [&lt;a href="https://plexydesk.com" rel="noopener noreferrer"&gt;https://plexydesk.com&lt;/a&gt;]&lt;/p&gt;

</description>
      <category>cpp</category>
      <category>x11</category>
      <category>kde</category>
      <category>gnome</category>
    </item>
  </channel>
</rss>
