Can't RDP when no screen connected?

Hey all,

I’m running KDE Plasma on a new Arch install attempting to setup an RDP solution.

From research I’ve found that I can’t RDP in without a user being logged in which, kind of, defeats the purpose of how I want to use the RDP. I attempted to use xrdp instead and I could get that to sort of work. Eventually though I had to abandon it because it broke all login capability.

I went back to trying to get KRDP working since that’s supposed to be native with wayland support. I setup autologin for my RDP authorized user and blanked out the password in kwallet so that can be unlocked and used via RDP. This worked once. After the first connection, I can’t reconnect. I restarted the box via SSH thinking something broke when I disconnected previously and it still won’t let me RDP but SSH works just fine.

So now I’m wondering if the system needs an external display connected in order to do an autologin? Maybe autologin doesn’t work if it doesn’t have a defined display?

Does anyone know if that’s accurate or what I might do to fix this?

I’d separate two questions: did the Plasma session start, and did KRDP start inside it?

The KRDP README says SDDM has no RDP support, so you need an existing session or autologin. It doesn’t establish that a physical monitor is required, so I wouldn’t buy a dummy plug based on this symptom alone.

After a headless reboot, try these read-only checks over SSH:

loginctl list-sessions
loginctl session-status <session-id>
systemctl --user status app-org.kde.krdpserver.service --no-pager

Replace <session-id> with the relevant session from the first command. For the last command, use the same account that autologs into Plasma, not root or another SSH user. That service name is the one in KRDP’s documented CLI setup. If your package doesn’t have it, please include that error rather than changing anything yet.

Could you post those results, your Plasma/KRDP versions and the RDP client’s exact error, with personal details redacted? That would help distinguish a failed autologin from a server/session problem. I haven’t tested your headless setup.

One security caveat from the same README: autologin starts the session physically unlocked, and remote login also leaves it physically unlocked.

Hey,

Thanks for the response. This is what I have for you so far:

First, the list-sessions command returned three sessions. I believe the one in question is supposed to be session 1.

Session info:

  Since: Wed 2026-10-14 14:26:54 EDT; 10min ago
  State: active
 Leader: 673 (plasmalogin-hel)
   Seat: seat0; vc1
    TTY: tty1
 Remote: no
Service: plasmalogin-autologin
   Type: wayland
  Class: user
Desktop: KDE
   Idle: no
   Unit: session-1.scope
         ├─673 /usr/lib/plasmalogin-helper --socket /tmp/plasmalogin-auth-82415558-f5a6-4c8e-bde1-cafb48136ac3 --id 1 --start "/usr/lib/pl
asma-dbus-run-session-if-needed /usr/bin/startplasma-wayland" --user [USER] --autologin
         └─690 /usr/bin/startplasma-wayland

Oct 14 14:26:54 [HOST] systemd[1]: Started Session 1 of User [USER].
Oct 14 14:26:54 [HOST] plasmalogin-helper[690]: Jumping to VT 1
Oct 14 14:26:54 [HOST] plasmalogin-helper[690]: VT mode fixed

Systemctl command output:

systemctl --user status app-org.kde.krdpserver.service --no-pager 
○ app-org.kde.krdpserver.service - KRDP Server
     Loaded: loaded (/usr/lib/systemd/user/app-org.kde.krdpserver.service; enabled; preset: disabled)
     Active: inactive (dead)
        Job: 116

Plasma Version:

plasma-desktop 6.7.5-1 (plasma)

Interestingly, with trying to find the plasma version, I tried using the plasmashell --version command and it just hung…I had to look up what version was installed via pacman. I wonder if this is indicative of some problem…

krdp Version:

krdp 6.7.5-1 (plasma)

And yeah, I don’t like the idea of Autologin but this server is squirreled away on a separate section of my LAN behind and controlled by my Netgate. Still not ideal but I’m ok with the current situation until/unless I find a better alternative.

Your output answers the first half of the question: the session starts fine without a screen. Session 1 is active, type wayland, started by plasmalogin-autologin, so autologin is doing its job and no dummy plug is needed for this part.

The gap is the second half: app-org.kde.krdpserver.service is inactive (dead). If the server isn’t running, nothing is listening on the RDP port (3389 by default), so a client has nothing to connect to.

According to the KRDP README, the Remote Desktop page in System Settings toggles the krdpserver binary on and off via systemd DBus messages and can set it to auto-start at session login. Your unit is enabled but dead, so the useful next step is to see why it isn’t running:

  1. Start it by hand: systemctl --user start app-org.kde.krdpserver.service
  2. Look at the result: systemctl --user status app-org.kde.krdpserver.service --no-pager and journalctl --user -u app-org.kde.krdpserver.service -b
  3. If it stays up, try the RDP connection right away. If it works when started manually, the remaining problem is only the autostart, not RDP itself.

When reading the journal, watch for the things the README says the settings page sanity-checks and warns about: an inaccessible password manager (KRDP stores the per-user RDP passwords there), no supported H264 encoder, and certificate generation failures. On a fresh Arch install a missing encoder would not surprise me; the journal should name the concrete reason if the start fails.

If the manual start fails, post that journal output here and we can look at the actual error.

The plasmashell --version hang I can’t interpret; I would not read much into it either way.

hmmm…alright so this is where I’m at. For clarity too, I’ve had it enabled via the GUI from the beginning where it’s supposed to auto-start the server under my user.

I started the krdp server manually and it stayed up and running. I tried connecting to it with the same failure. I tried changing some of the security negotiation settings on Remmina to see if the auto-negotiation was failing for some reason but they all failed.

The two result commands show that the KRDP server has started and is running throughout these tests.

pp-org.kde.krdpserver.service - KRDP Server
     Loaded: loaded (/usr/lib/systemd/user/app-org.kde.krdpserver.service; enabled; preset: disabled)
     Active: active (running) since Wed 2026-10-14 15:19:51 EDT; 17h ago
 Invocation: f83cba1154d046f48d1fa1f910a8830f
   Main PID: 45036 (krdpserver)
      Tasks: 2 (limit: 17812)
     Memory: 30.6M (peak: 76.5M)
        CPU: 126ms
     CGroup: /user.slice/user-1000.slice/user@1000.service/app.slice/app-org.kde.krdpserver.service
             └─45036 /usr/bin/krdpserver

Oct 14 15:19:51 archpod systemd[689]: Starting KRDP Server...
Oct 14 15:19:51 archpod systemd[689]: Started KRDP Server.

I checked to see if krdp was listening too and interestingly it wasn’t.

ss -lntp | grep 3389

This shows nothing listening on 3389. I even tried just doing lnp and grep | krdp just to make sure it wasn’t listening on some other TCP or UDP port. Nothing came up.

So the service is running but not actually listening. As a side note I did also check to make sure I opened up 3389 in the firewall and I had. Not that it would stop the port from listening but the firewall definitely isn’t blocking anything on 3389/tcp.

I rebooted the box and tried again. It comes up dead. When I look at the journal, I see this:

Oct 15 08:43:45 [HOST] systemd[689]: Stopping KRDP Server...
Oct 15 08:43:45 [HOST] systemd[689]: Stopped KRDP Server.
Oct 15 08:43:45 [HOST] systemd[689]: app-org.kde.krdpserver.service: Consumed 131ms CPU time over 17h 23min 54.407s wall clock time, 76.5M memory peak.
Oct 15 08:43:45 [HOST] systemd[689]: Starting KRDP Server...
Oct 15 08:43:45 [HOST] systemd[689]: Started KRDP Server.
Oct 15 08:45:13 [HOST] systemd[689]: Stopping KRDP Server...
Oct 15 08:45:13 [HOST] systemd[689]: Stopped KRDP Server.

And now, when I try to start the service manually again with the start command, it hangs and never does anything. No new entries show up in the journal either. The terminal is still interactive because I can ctrl+c it and it responds immediately. It just…doesn’t do anything.

I can’t even run the dummy krdp server with the krdpserver -u user -p pass command. It too just hangs.

I’m not sure what the difference is either. Obviously I was able to start the service this morning when I started doing the troubleshooting. The system hadn’t rebooted and I could start it just fine. But now after a reboot, it won’t respond. So…is there a dependency that isn’t loading or something…hmm

Try running KDE Linux on a live USB stick, and follow official docs: https://linux.kde.org/docs/remote-login/

KDE Linux is immutable, which means everybody gets the same set of system packages without any way to accidentally mess them up. Even fresh Arch Linux installations of KDE Plasma aren’t always “identical”, for instance, because there are like 3 ways of installing Plasma.

BTW, if you find a problem in KDE Plasma (even on Arch installs), you can report them on bugs.kde.org.

Two of your results narrow this down a lot.

First: while nothing is listening on 3389, every Remmina setting is irrelevant - security negotiation can only matter once a server socket exists. The client side is not part of the problem at the moment.

Second: the bare krdpserver -u user -p pass hanging as well means systemd is not involved either. The block is inside the binary’s own startup, before it ever binds the port. And since even this morning’s manual start never opened the port, krdpserver has, as far as the evidence goes, never completed initialization on this machine.

Next things I would check, all read-only:

1. The config the server reads. krdpserver reads ~/.config/krdpserverrc. In a working setup (reported in an openSUSE forum thread with the same server) that file names the TLS certificate and key under ~/.local/share/krdpserver/ plus a Users= line. Check the file exists and that the certificate paths it names exist and are readable. The KRDP README says the settings page sanity-checks certificate generation, so a missing or half-written cert is a plausible stall point.

2. See where it blocks:

strace -f krdpserver -u user -p pass 2>&1 | tail -40

The last lines before the hang usually name the resource it is waiting on - a D-Bus reply, a file, a socket.

3. Turn on Qt debug output:

QT_LOGGING_RULES='*.debug=true' krdpserver -u user -p pass

Qt’s logging rules are documented in the Qt QLoggingCategory docs; if krdp uses categorized logging, this shows the step it stalls on. If it stays silent, the strace from step 2 is the more informative of the two.

4. One hypothesis: the README says the settings page warns when the password manager is inaccessible, because KRDP stores the per-user RDP passwords there. Your blanked-wallet setup avoids an unlock prompt, but if the wallet daemon is not answering in that session, a startup call into it could block without a log line. The strace would show whether it is waiting on such a call. I have no README confirmation for this specific path, so treat it as speculation.

And one more data point, if you get to it: whether the hang also happens in a session started with a screen attached would separate “headless session” from “something broke between this morning and the reboot”.

PREEDIT:

I think I have a more fundamental problem…I’m not sure when or what happened but I set everything back up to have a monitor attached and…blank. The whole screen. I rebooted, I see the splash screen come up, nothing after that. It’s like SDDM isn’t launching. I have no idea how autologin shows a session and I can SSH plus my jellyfin service is running fine, but I can’t login at all lol.

I’ll leave my response below for now (mainly because I wrote a lot and don’t want to delete it). But I’m going to take a step back and try to figure out when and where SDDM disappears…

I installed through archinstall and at least the first login and couple of reboots work just fine…I have no idea why it fails or when it fails.

sigh


Just getting back to this, work popped up the last few days and I couldn’t troubleshoot.

Now that I’m back, here’s what I’ve found:

  1. The config is present and accessible by my user.
  2. The key and crt are present and readable by my user.
  3. The rc file was missing a Users= line so I added that. I feel like checking the box in the GUI should’ve added this line already?

Interestingly…the strace command freezes immediately with no output at all. I run the command, the cursor goes to the next line, and nothing lol. So…what’s the very first thing krdpserver does cause it seems to get hung up on that.

The QT logging command has some output but also hangs after a loaded library.

qt.core.plugin.factoryloader: Got keys from plugin meta data QList("xcb")
qt.core.plugin.factoryloader: checking directory path "/usr/bin/platforms" ...
qt.qpa.plugin: Attempting to load Qt platform plugin "xcb" with arguments QList()
qt.core.library: "/usr/lib/qt6/plugins/platforms/libqxcb.so" loaded library

Then it just sits there too.

To your hypothesis, how could I tell if the wallet isn’t answering in the session? It seems so far like there should be a session right? Because we see autologin work?

So far all of these hangs have happened with no screen attached.

@SpacemanSpiff you’ve had issues so far. Don’t you think it would be good if you wrote a bug report?

I advice you to write up a step-by-step plan: how can someone else reproduce this?

And then, put that on bugs.kde.org.

I see this often. A lot of time spent on trying to find the cause of a problem. Lots of speculation. Writing a good bug report will make you verify each step you took. It will formalize the problem into a proper structure, and KDE devs will actually look at it. They can verify the cause for you. You just make sure it is reproducible.

It is not appropriate to write a bug report yet.

I will write one when, just as you have stated, I can reproduce the error. I haven’t even found the core issue yet, or what I think could be the core issue.

I don’t want to waste the dev’s time doing a bug report when it turns out I had a corrupted install ISO from the beginning or something else outside of their control.

To that end, I downloaded a different Arch ISO and now when I start the system, krdp is actually listening on 3389 after reboots. So even the previous troubleshooting I did might be able to be done now because krdpserver actually runs. And now I’m running into a completely different issue.

Incorrect. Knowing what the core issue is doesn’t matter. You just have to write up a step-by-step plan to make the issue happen on demand. It’s about reproducibility.

Please read the KDE bug reporting instructions:

If you’re reporting an issue, make sure you’ve found a 100% reproducible way to make it happen on demand. If you haven’t found this yet, troubleshoot the problem until you do.

If you read the full instructions, you will see that they say nothing about you having to know what causes it.

KDE Discuss is for people looking to file a complaint or look for assistance.

If you have a complaint or need help with something, use KDE’s Discuss forum or another online discussion group of your choice.

(post deleted by author)

(post deleted by author)

See also the last part of troubleshooting, arguably the most important things summed up:

Open a bug report

If you got to this point, the following should be true:

  1. Something unexpected happens.
  2. Your expectations about what should happen are reasonable.
  3. You know exactly how to make the issue happen every time you try.
  4. The issue happens in software made by KDE.
  5. The issue happens in a recent version of the software.

If this is the case, it’s time to open a bug report so KDE’s developers can investigate the bug and hopefully fix it.

As a part of this process, make sure to:

  • Preserve the buggy environment/situation for testing purposes. Don’t do anything that destroys your ability to reproduce the bug, such as reinstalling the OS or deleting all your settings.
  • Be willing to correspond with KDE developers about the issue, potentially over an extended period of time.
  • Be prepared to gather and report a lot of additional information.
  • Be ready to potentially use a terminal program to execute command line debugging tools.