A teammate says the Save 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.
In this tutorial, you’ll reproduce that failure with a small HTML app, inspect it through a Linux remote desktop session on Wayland, and fix the layout with one CSS change.
What you’ll need
- An Ubuntu Desktop workstation or VM with GNOME, an unlocked graphical session, a browser, and Python 3.
- A second computer with a browser to open the remote session.
- An authorized Getscreen.me connection to the Ubuntu machine. SSH access is optional: you can run the shell checks directly on the host.
- No Python packages, admin privileges, or public ports are needed to run the demo app.
Step 1: Confirm you’re working in a Wayland session
Open a terminal from the Ubuntu desktop and run:
printf 'Session: %s\nDesktop: %s\n' "$XDG_SESSION_TYPE" "$XDG_CURRENT_DESKTOP" . /etc/os-release printf 'OS: %s\n' "$PRETTY_NAME" Example output:
Session: wayland Desktop: ubuntu:GNOME OS: Ubuntu 24.04 LTS 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.
Step 2: Create a demo with a hidden Save button
Create a scratch directory on the Ubuntu host. Paste this entire block into a terminal:
demo_dir=$(mktemp -d) printf 'Demo directory: %s\n' "$demo_dir" cd "$demo_dir" || exit cat > index.html <<'HTML' <!doctype html> <html lang="en"> <meta charset="utf-8"> <title>Desktop settings demo</title> <style> body { font: 18px system-ui; background: #eee8f0; padding: 24px; } .panel { box-sizing: border-box; width: min(100%, 440px); height: 260px; overflow: hidden; background: white; padding: 16px; border: 1px solid #7a627d; } .fields { min-height: 260px; } label { display: block; margin-block: 16px; } </style> <h1>Workspace preferences</h1> <p id="status" role="status">No changes saved.</p> <form class="panel" aria-label="Workspace preferences"> <div class="fields"> <label>Workspace name <input value="Demo"></label> <label>Theme <select><option>Light</option><option>Dark</option></select></label> </div> <button type="submit">Save</button> </form> <script> document.querySelector('form').addEventListener('submit', (event) => { event.preventDefault(); document.querySelector('#status').textContent = 'Saved (demo only).'; }); </script> </html> HTML python3 -m http.server 8765 --bind 127.0.0.1 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.
Step 3: Check what SSH can tell you
From an existing SSH session or another terminal on Ubuntu, run:
curl -sS -o /dev/null -w 'HTTP %{http_code}\n' http://127.0.0.1:8765/ Expected output:
HTTP 200 The server terminal should also log a successful GET / 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.
| What you need to check | Tool to use |
|---|---|
| Is the process running or responding to HTTP? | SSH and shell commands |
| What does the user see at this moment? | Screenshot or screen sharing |
| Can I reproduce the problem in the affected desktop session? | Remote desktop with keyboard and mouse control |
| Which CSS rule caused the problem? | Browser DevTools in that desktop session |
Step 4: Connect to the Ubuntu desktop from your browser
For this lab, use Getscreen.me - Linux remote desktop with Wayland support. Wayland support was introduced in Linux agent 1.8.378; use an up-to-date agent to get subsequent fixes. See the Linux agent changelog.
- On the Ubuntu host, follow the agent installation guide.
- For a session with a teammate, use Quick Support. For a workstation already linked to your account, use Permanent Access.
- 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.
- Inside the remote Ubuntu desktop, open a browser and go to
http://127.0.0.1:8765/. If you type that URL directly into the browser on your second computer, it points to that computer instead.
If your team already uses an Ubuntu remote desktop server over RDP, GNOME Desktop Sharing 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.
Step 5: Find the layout bug in DevTools
- Open DevTools in the Ubuntu browser using its menu or
Ctrl+Shift+I. - In the HTML inspector, select
form.paneland locateoverflow: hiddenin the rules. - Change it to
overflow: auto. The panel can now scroll to reveal Save. - Scroll inside the panel, click Save, and check for Saved (demo only). above the form.
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.
| Check | Before | After |
|---|---|---|
| HTTP response | 200 | 200 |
| Panel overflow | Hidden | Scrollable |
| Save button | Clipped | Reachable by scrolling |
| Visible confirmation | No changes saved. | Saved (demo only). |
Step 6: Save the fix and verify it after reload
DevTools changes disappear on reload. To apply the fix to the source, open a terminal on the host or use Getscreen.me’s Terminal Mode, if enabled. From the demo directory printed in Step 2, run:
sed -i 's/overflow: hidden;/overflow: auto;/' index.html Reload the page. Scroll the panel and click Save again. Confirm that the fix survives reload. If you need to attach the demo to a bug report, retrieve index.html with File Manager where access is enabled.
When finished, press Ctrl+C in the server terminal and end the remote session.
Common mistakes and troubleshooting
| Symptom | What to check |
|---|---|
| The browser says it can’t connect | Open the URL inside the remote Ubuntu browser. Check that the Python server is still running and that the URL uses the correct port. |
| The page loads, but screen control doesn’t work | Check for a desktop approval prompt, verify that your connection grants control, and confirm the agent version. Start with the graphical session unlocked. |
| You connected, but can’t see the user’s app | Confirm you’re viewing the affected desktop session and monitor. A new login may open a different session. |
| The fix vanishes after reload | Save the CSS change to index.html. DevTools edits are temporary. |
| The demo works, but the production bug is inconsistent | Record the app build, distribution, desktop environment, session type, monitor, display scale, and window size. Change one variable at a time. |
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.
A useful report ends with something specific: “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.” SSH confirmed the server was responding; the graphical session gave us the evidence needed to fix the interface.


