{"id":446,"date":"2026-05-10T03:11:03","date_gmt":"2026-05-10T03:11:03","guid":{"rendered":"https:\/\/nocoffei.com\/?p=446"},"modified":"2026-05-10T03:11:04","modified_gmt":"2026-05-10T03:11:04","slug":"failing-at-locally-remoting-into-my-desktop","status":"publish","type":"post","link":"https:\/\/nocoffei.com\/?p=446","title":{"rendered":"Failing At Locally Remoting Into My Desktop"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">I woke up and decided this morning that I would figure out how to use my ThinkPad X1 Yoga as a KVM (keyboard, mouse and video) for my Framework Desktop.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The reasoning behind this is simple&#8211; the Framework Desktop is quite small and packs quite a punch within its volume. I figured if there was ever a reason I needed an extreme excess of computing performance on the go, say, for a LAN party, I could use a laptop that was already in my bag as the display and input device.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sadly this did not work out, and given that I time boxed this to one day I don&#8217;t have any interest in pursuing it further. I&#8217;m mostly posting this to see if anyone smarter than me out there knows what my problem is.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Plan<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">So the idea was that Thunderbolt supports a peer to peer network connection, which means that I would only need one small cable to both charge the laptop and provide more than enough networking bandwidth for a fully uncompressed 1080p video stream.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Because I have not <a href=\"https:\/\/nocoffei.com\/?p=247\">subjected myself to this technology<\/a> <a href=\"https:\/\/nocoffei.com\/?p=202\">enough times.<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This went about as well as I could have expected.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A USB-C to USB-C cable connected to the Desktop and to the Yoga yielded no connection at all. Nothing. Nada. Zip. Nothing in journalctl at all. No logs. No indication that nothing had happened.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So I tried a few other connections. Between my Framework Laptop (Ryzen 7040) and the Yoga? Working network. Between my Framework Laptop and my Framework Desktop? Working network.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Framework Desktop to a ThinkPad Thunderbolt Dock, with a Thunderbolt daisy-chain out to the Yoga? That yielded a working network, because of course it did. I guess an intermediary is enough to beat some sense into this thing. Of course this is pointless when the idea is to pack a small bag with no extras; it&#8217;s a big, heavy dock. If I wanted to pack that I might as well pack a good USB-C to Ethernet adapter and a fairly bulky Ethernet cord.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Virtual Display?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The idea is to use the network to stream the display. <a href=\"https:\/\/github.com\/LizardByte\/Sunshine\">Sunshine<\/a> will be our host for this, and we&#8217;ll use Moonlight on the client side. Sunshine does not support automatically creating virtual displays on Linux, so we will have to do it ourselves.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Some people use an HDMI Dummy Plug&#8211; a small trinket that advertises various available resolutions and refresh rates to a &#8220;display&#8221; that doesn&#8217;t actually exist, in order to inform the graphics card that it <em>should<\/em> be outputting to a display. I was worried about losing this, or worse yet, having it damage the port on a computer that is <a href=\"https:\/\/frame.work\/products\/desktop-diy-amd-aimax300\/configuration\/new\">continuing to appreciate<\/a> at a constant rate (at the time of writing the computer is worth $3000). <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">There&#8217;s a theoretically better solution. You can just take an unused port on your machine and force the amdgpu kernel driver to have that port &#8220;connected&#8221; to an EDID file that represents a display. Here&#8217;s the <a href=\"https:\/\/www.reddit.com\/r\/linux_gaming\/comments\/199ylqz\/streaming_with_sunshine_from_virtual_screens\/\">best post I found<\/a> on how to make that happen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Strix Halo advertises a lot of ports, but doesn&#8217;t seem to use most of them:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>qwe@strength:~$ for p in \/sys\/class\/drm\/*\/status; do con=${p%\/status}; echo -n \"${con#*\/card?-}: \"; cat $p; done\nDP-10: disconnected\nDP-11: connected\nDP-1: disconnected\nDP-2: disconnected\nDP-3: disconnected\nDP-4: disconnected\nDP-5: disconnected\nDP-6: disconnected\nDP-7: disconnected\nDP-8: disconnected\nDP-9: disconnected\nHDMI-A-1: disconnected\nWriteback-1: unknown<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">So I just assigned the virtual display to DP-8. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This created some problems, but I&#8217;ll detour for a moment to explain what did work.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">A Success Story<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The Steam Deck does not support Thunderbolt, but it does support acting as a USB device. There&#8217;s a script floating around the internet that will take advantage of that functionality to <a href=\"https:\/\/gist.github.com\/dafta\/0aadeba3aa8bcbbc8b92a233977571ed\">advertise it as a USB Ethernet gadget<\/a>. This works! I even tried using it earlier this year to serve my games to my Desktop in order to avoid duplicating space. (This also works, and isn&#8217;t TOO slow, but is somewhat silly. Just mount your games directory with SFTP and sshfs.)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This network came up just fine! And with Moonlight on the Deck, and the EDID perfectly matching the Steam Decks display, I was able to get a fully peer to peer network stream going!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">But Not Really<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">See, the problem with that is that it was working in a Wayland session.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I <em>have<\/em> to use X11, due to some accessibility software that does not, and likely never will, work on Wayland. (A separate article on this will come out whenever I get around to it.) Of course, X11 is an ancient decrepit mess, and I&#8217;m trying to use it on 2025 hardware. Even so, it&#8217;s surprising that Xorg <em>completely refuses to start<\/em> with the virtual display connected.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It breaks so hard, it doesn&#8217;t even write to \/var\/log\/Xorg.0.log! The session exits immediately. When starting a session from the login manager (SDDM), I get a permanent black screen with no opportunity to switch to a TTY. When calling startx from a TTY, the session simply exits after a few seconds with no errors printed to the console.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Why? I have no idea. The internet has no references to this kind of issue, or at least ones that I could find. I guess everyone trying to do this is just using Wayland these days? It&#8217;s a real shame I&#8217;m left behind. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Lessons Learned?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">IDK. \u00af\\_(\u30c4)_\/\u00af<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Maybe that I&#8217;m not smart enough to debug these kinds of weird ass issues? Maybe that I&#8217;m smart enough to know <em>not<\/em> to?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If someone out there has an inkling of what&#8217;s wrong, please reach out! My email address is in the &#8220;about&#8221; page.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>One-day failed hackjob<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-446","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/nocoffei.com\/index.php?rest_route=\/wp\/v2\/posts\/446","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nocoffei.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nocoffei.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nocoffei.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/nocoffei.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=446"}],"version-history":[{"count":1,"href":"https:\/\/nocoffei.com\/index.php?rest_route=\/wp\/v2\/posts\/446\/revisions"}],"predecessor-version":[{"id":447,"href":"https:\/\/nocoffei.com\/index.php?rest_route=\/wp\/v2\/posts\/446\/revisions\/447"}],"wp:attachment":[{"href":"https:\/\/nocoffei.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=446"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nocoffei.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=446"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nocoffei.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=446"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}