<?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: Natalie Ropii</title>
    <description>The latest articles on DEV Community by Natalie Ropii (@liya_ro).</description>
    <link>https://dev.to/liya_ro</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4229793%2Fad53b389-4a37-47ad-a88a-a2226652b87d.jpg</url>
      <title>DEV Community: Natalie Ropii</title>
      <link>https://dev.to/liya_ro</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/liya_ro"/>
    <language>en</language>
    <item>
      <title>When SSH Is Not Enough: Using Linux Remote Desktop to Debug GUI Applications</title>
      <dc:creator>Natalie Ropii</dc:creator>
      <pubDate>Tue, 10 Nov 2026 07:54:13 +0000</pubDate>
      <link>https://dev.to/liya_ro/when-ssh-is-not-enough-using-linux-remote-desktop-to-debug-gui-applications-2f8h</link>
      <guid>https://dev.to/liya_ro/when-ssh-is-not-enough-using-linux-remote-desktop-to-debug-gui-applications-2f8h</guid>
      <description>&lt;p&gt;A teammate says the &lt;strong&gt;Save&lt;/strong&gt; button has disappeared from your settings dialog. You SSH into their Ubuntu workstation, check that the app is serving requests, and find no obvious server error. All of that can be true while the interface is unusable.&lt;/p&gt;

&lt;p&gt;In this tutorial, you’ll reproduce that failure with a small HTML app, inspect it through a &lt;strong&gt;Linux remote desktop&lt;/strong&gt; session on Wayland, and fix the layout with one CSS change.&lt;/p&gt;

&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7j4f99w0dubhlr9kyzv4.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7j4f99w0dubhlr9kyzv4.png" alt="Using Linux Remote Desktop to Debug GUI Applications" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What you’ll need
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;An Ubuntu Desktop workstation or VM with GNOME, an unlocked graphical session, a browser, and Python 3.&lt;/li&gt;
&lt;li&gt;A second computer with a browser to open the remote session.&lt;/li&gt;
&lt;li&gt;An authorized Getscreen.me connection to the Ubuntu machine. SSH access is optional: you can run the shell checks directly on the host.&lt;/li&gt;
&lt;li&gt;No Python packages, admin privileges, or public ports are needed to run the demo app.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 1: Confirm you’re working in a Wayland session
&lt;/h2&gt;

&lt;p&gt;Open a terminal &lt;strong&gt;from the Ubuntu desktop&lt;/strong&gt; and run:&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;printf&lt;/span&gt; &lt;span class="s1"&gt;'Session: %s\nDesktop: %s\n'&lt;/span&gt; &lt;span class="s2"&gt;"$XDG_SESSION_TYPE"&lt;/span&gt; &lt;span class="s2"&gt;"$XDG_CURRENT_DESKTOP"&lt;/span&gt;
. /etc/os-release
&lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s1"&gt;'OS: %s\n'&lt;/span&gt; &lt;span class="s2"&gt;"$PRETTY_NAME"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Session: wayland
Desktop: ubuntu:GNOME
OS: Ubuntu 24.04 LTS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run this in the graphical session. An SSH login can have different environment variables and doesn’t establish which display protocol the desktop is using.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Create a demo with a hidden Save button
&lt;/h2&gt;

&lt;p&gt;Create a scratch directory on the Ubuntu host. Paste this entire block into a terminal:&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="nv"&gt;demo_dir&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$(&lt;/span&gt;mktemp -d&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s1"&gt;'Demo directory: %s\n'&lt;/span&gt; &lt;span class="s2"&gt;"$demo_dir"&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; &lt;span class="s2"&gt;"$demo_dir"&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;exit&lt;/span&gt;
cat &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; index.html &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s1"&gt;'HTML'&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;!doctype html&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;html &lt;span class="nv"&gt;lang&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"en"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;meta &lt;span class="nv"&gt;charset&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"utf-8"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;title&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;Desktop settings demo&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;/title&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;style&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  body &lt;span class="o"&gt;{&lt;/span&gt; font: 18px system-ui&lt;span class="o"&gt;;&lt;/span&gt; background: &lt;span class="c"&gt;#eee8f0; padding: 24px; }&lt;/span&gt;
  .panel &lt;span class="o"&gt;{&lt;/span&gt;
    box-sizing: border-box&lt;span class="o"&gt;;&lt;/span&gt;
    width: min&lt;span class="o"&gt;(&lt;/span&gt;100%, 440px&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    height: 260px&lt;span class="o"&gt;;&lt;/span&gt;
    overflow: hidden&lt;span class="o"&gt;;&lt;/span&gt;
    background: white&lt;span class="o"&gt;;&lt;/span&gt;
    padding: 16px&lt;span class="o"&gt;;&lt;/span&gt;
    border: 1px solid &lt;span class="c"&gt;#7a627d;&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;
  .fields &lt;span class="o"&gt;{&lt;/span&gt; min-height: 260px&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;
  label &lt;span class="o"&gt;{&lt;/span&gt; display: block&lt;span class="o"&gt;;&lt;/span&gt; margin-block: 16px&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;/style&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;h1&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;Workspace preferences&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;/h1&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;p &lt;span class="nv"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"status"&lt;/span&gt; &lt;span class="nv"&gt;role&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"status"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;No changes saved.&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;/p&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;form &lt;span class="nv"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"panel"&lt;/span&gt; aria-label=&lt;span class="s2"&gt;"Workspace preferences"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;div &lt;span class="nv"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"fields"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;label&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;Workspace name &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;input &lt;span class="nv"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Demo"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;lt;&lt;/span&gt;/label&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;label&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;Theme &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;select&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;lt;&lt;/span&gt;option&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;Light&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;/option&lt;span class="o"&gt;&amp;gt;&amp;lt;&lt;/span&gt;option&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;Dark&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;/option&lt;span class="o"&gt;&amp;gt;&amp;lt;&lt;/span&gt;/select&lt;span class="o"&gt;&amp;gt;&amp;lt;&lt;/span&gt;/label&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;/div&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;button &lt;span class="nv"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"submit"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;Save&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;/button&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;/form&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;script&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  document.querySelector&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'form'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;.addEventListener&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'submit'&lt;/span&gt;, &lt;span class="o"&gt;(&lt;/span&gt;event&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    event.preventDefault&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    document.querySelector&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'#status'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;.textContent &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'Saved (demo only).'&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;/script&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;/html&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
HTML
python3 -m http.server 8765 --bind 127.0.0.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Leave that terminal running. The server listens on the Ubuntu machine’s loopback address, so the page is available to the browser on that machine. It doesn’t persist preferences; the status message only confirms that the form handler ran.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Check what SSH can tell you
&lt;/h2&gt;

&lt;p&gt;From an existing SSH session or another terminal on Ubuntu, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl -sS -o /dev/null -w &lt;span class="s1"&gt;'HTTP %{http_code}\n'&lt;/span&gt; http://127.0.0.1:8765/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Expected output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;HTTP 200
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The server terminal should also log a successful &lt;code&gt;GET /&lt;/code&gt; request. That verifies the HTML was served. It doesn’t tell you whether the browser laid out the button where a user can see it.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What you need to check&lt;/th&gt;
&lt;th&gt;Tool to use&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Is the process running or responding to HTTP?&lt;/td&gt;
&lt;td&gt;SSH and shell commands&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;What does the user see at this moment?&lt;/td&gt;
&lt;td&gt;Screenshot or screen sharing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Can I reproduce the problem in the affected desktop session?&lt;/td&gt;
&lt;td&gt;Remote desktop with keyboard and mouse control&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Which CSS rule caused the problem?&lt;/td&gt;
&lt;td&gt;Browser DevTools in that desktop session&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Step 4: Connect to the Ubuntu desktop from your browser
&lt;/h2&gt;

&lt;p&gt;For this lab, use &lt;a href="https://getscreen.me/" rel="noopener noreferrer"&gt;Getscreen.me - Linux remote desktop&lt;/a&gt; with Wayland support. Wayland support was introduced in Linux agent &lt;strong&gt;1.8.378&lt;/strong&gt;; use an up-to-date agent to get subsequent fixes. See the &lt;a href="https://docs.getscreen.me/change-log/agent/linux/" rel="noopener noreferrer"&gt;Linux agent changelog&lt;/a&gt;.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;On the Ubuntu host, follow the &lt;a href="https://docs.getscreen.me/user-guides/installation/" rel="noopener noreferrer"&gt;agent installation guide&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;For a session with a teammate, use &lt;a href="https://docs.getscreen.me/user-guides/init-connection/" rel="noopener noreferrer"&gt;Quick Support&lt;/a&gt;. For a workstation already linked to your account, use Permanent Access.&lt;/li&gt;
&lt;li&gt;On your second computer, open the connection in a browser. If Ubuntu presents a capture or control prompt, have the person at the workstation approve the intended session.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inside the remote Ubuntu desktop&lt;/strong&gt;, open a browser and go to &lt;code&gt;http://127.0.0.1:8765/&lt;/code&gt;. If you type that URL directly into the browser on your second computer, it points to that computer instead.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If your team already uses an Ubuntu remote desktop server over RDP, &lt;a href="https://documentation.ubuntu.com/desktop/en/24.04/how-to/share-your-desktop-remotely/" rel="noopener noreferrer"&gt;GNOME Desktop Sharing&lt;/a&gt; is another option. On the documented Ubuntu setup, Desktop Sharing gives you the existing session; Remote Login serves a different purpose. A Linux remote desktop client such as Remmina can connect to the RDP setup. The Getscreen.me walkthrough above uses its standard browser connection.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Find the layout bug in DevTools
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open DevTools &lt;strong&gt;in the Ubuntu browser&lt;/strong&gt; using its menu or &lt;code&gt;Ctrl+Shift+I&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;In the HTML inspector, select &lt;code&gt;form.panel&lt;/code&gt; and locate &lt;code&gt;overflow: hidden&lt;/code&gt; in the rules.&lt;/li&gt;
&lt;li&gt;Change it to &lt;code&gt;overflow: auto&lt;/code&gt;. The panel can now scroll to reveal &lt;strong&gt;Save&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Scroll inside the panel, click &lt;strong&gt;Save&lt;/strong&gt;, and check for &lt;strong&gt;Saved (demo only).&lt;/strong&gt; above the form.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The panel is 260 CSS pixels tall, and the fields alone occupy at least 260 CSS pixels. The button comes after the fields, below the visible area. The layout rule cuts it off even though the server successfully delivered the page.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Check&lt;/th&gt;
&lt;th&gt;Before&lt;/th&gt;
&lt;th&gt;After&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;HTTP response&lt;/td&gt;
&lt;td&gt;200&lt;/td&gt;
&lt;td&gt;200&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Panel overflow&lt;/td&gt;
&lt;td&gt;Hidden&lt;/td&gt;
&lt;td&gt;Scrollable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Save button&lt;/td&gt;
&lt;td&gt;Clipped&lt;/td&gt;
&lt;td&gt;Reachable by scrolling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Visible confirmation&lt;/td&gt;
&lt;td&gt;No changes saved.&lt;/td&gt;
&lt;td&gt;Saved (demo only).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Step 6: Save the fix and verify it after reload
&lt;/h2&gt;

&lt;p&gt;DevTools changes disappear on reload. To apply the fix to the source, open a terminal on the host or use Getscreen.me’s &lt;a href="https://docs.getscreen.me/user-guides/screen-control/" rel="noopener noreferrer"&gt;Terminal Mode&lt;/a&gt;, if enabled. From the demo directory printed in Step 2, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;sed -i &lt;span class="s1"&gt;'s/overflow: hidden;/overflow: auto;/'&lt;/span&gt; index.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Reload the page. Scroll the panel and click &lt;strong&gt;Save&lt;/strong&gt; again. Confirm that the fix survives reload. If you need to attach the demo to a bug report, retrieve &lt;code&gt;index.html&lt;/code&gt; with &lt;a href="https://docs.getscreen.me/user-guides/file-manager/" rel="noopener noreferrer"&gt;File Manager&lt;/a&gt; where access is enabled.&lt;/p&gt;

&lt;p&gt;When finished, press &lt;code&gt;Ctrl+C&lt;/code&gt; in the server terminal and end the remote session.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common mistakes and troubleshooting
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Symptom&lt;/th&gt;
&lt;th&gt;What to check&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;The browser says it can’t connect&lt;/td&gt;
&lt;td&gt;Open the URL inside the remote Ubuntu browser. Check that the Python server is still running and that the URL uses the correct port.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The page loads, but screen control doesn’t work&lt;/td&gt;
&lt;td&gt;Check for a desktop approval prompt, verify that your connection grants control, and confirm the agent version. Start with the graphical session unlocked.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;You connected, but can’t see the user’s app&lt;/td&gt;
&lt;td&gt;Confirm you’re viewing the affected desktop session and monitor. A new login may open a different session.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The fix vanishes after reload&lt;/td&gt;
&lt;td&gt;Save the CSS change to &lt;code&gt;index.html&lt;/code&gt;. DevTools edits are temporary.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The demo works, but the production bug is inconsistent&lt;/td&gt;
&lt;td&gt;Record the app build, distribution, desktop environment, session type, monitor, display scale, and window size. Change one variable at a time.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This demo deliberately creates clipping without changing display scaling. In a real bug report, capture the actual conditions that trigger it. If you’re evaluating remote desktop for Linux across a fleet, verify those conditions on each target setup, including lock-screen behavior if you need unattended access.&lt;/p&gt;

&lt;p&gt;A useful report ends with something specific: &lt;strong&gt;“The settings panel clips Save when the fields exceed the available height. Allowing the panel to scroll makes Save reachable, and the form still works after reload.”&lt;/strong&gt; SSH confirmed the server was responding; the graphical session gave us the evidence needed to fix the interface.&lt;/p&gt;

</description>
      <category>debugging</category>
      <category>linux</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
