krdp 使用rdp协议报错

以下是报错日志

❯ systemctl --user status app-org.kde.krdpserver.service
● app-org.kde.krdpserver.service - KRDP Server
Loaded: loaded (/usr/lib/systemd/user/app-org.kde.krdpserver.service; enabled; preset: disabled)
Active: active (running) since Mon 2026-07-27 19:35:45 CST; 41s ago
Invocation: bb7558fd3c93417798035bc3e6a2425d
Main PID: 2651 (krdpserver)
Tasks: 5 (limit: 37360)
Memory: 60.4M (peak: 61.9M)
CPU: 165ms
CGroup: /user.slice/user-1000.slice/user@1000.service/app.slice/app-org.kde.krdpserver.service
└─2651 /usr/bin/krdpserver

7月 27 19:36:16 cachyos krdpserver[2651]: [19:36:16:842] [2651:0000141e] [ERROR][com.freerdp.core.peer] - [transport_read_layer]: ERRCONNECT_CONNECT_TRANSPORT_FAILED [0x0002000D]
7月 27 19:36:16 cachyos krdpserver[2651]: [19:36:16:842] [2651:00000a5b] [WARN][com.freerdp.core.rdp] - [rdp_send_deactivate_all][0x55c2f267f9b0]: rdpMcs::userId == 0, skip sending PDU_TYPE_DEACTIVATE_ALL
7月 27 19:36:16 cachyos krdpserver[2651]: [19:36:16:843] [2651:00000a5b] [WARN][com.freerdp.core.rdp] - [rdp_send_deactivate_all][0x55c2f267f9b0]: rdpMcs::userId == 0, skip sending PDU_TYPE_DEACTIVATE_ALL
7月 27 19:36:20 cachyos krdpserver[2651]: New client connected:  Windows platform Windows NT
7月 27 19:36:20 cachyos unix_chkpwd[5294]: check pass; user unknown
7月 27 19:36:20 cachyos unix_chkpwd[5294]: password check failed for user (alfred)
7月 27 19:36:20 cachyos krdpserver[2651]: pam_unix(login:auth): authentication failure; logname=alfred uid=1000 euid=1000 tty= ruser= rhost=  user=alfred
7月 27 19:36:22 cachyos krdpserver[2651]: pam_authenticate failure: 身份验证服务无法检索神身份验证信息
7月 27 19:36:22 cachyos krdpserver[2651]: [19:36:22:312] [2651:00001424] [ERROR][com.freerdp.api] - [rdp_peer_handle_state_active]: PostConnect for peer 0x55c2f2470f70 failed
7月 27 19:36:22 cachyos krdpserver[2651]: [19:36:22:312] [2651:00001424] [ERROR][com.freerdp.core.transport] - [transport_check_fds]: transport_check_fds: transport->ReceiveCallback() - STATE_RUN_FAILED [-1]                           /0.1s

~
❯ journalctl --user -u app-org.kde.krdpserver.service -f
7月 27 19:36:16 cachyos krdpserver[2651]: [19:36:16:842] [2651:0000141e] [ERROR][com.freerdp.core.peer] - [transport_read_layer]: ERRCONNECT_CONNECT_TRANSPORT_FAILED [0x0002000D]
7月 27 19:36:16 cachyos krdpserver[2651]: [19:36:16:842] [2651:00000a5b] [WARN][com.freerdp.core.rdp] - [rdp_send_deactivate_all][0x55c2f267f9b0]: rdpMcs::userId == 0, skip sending PDU_TYPE_DEACTIVATE_ALL
7月 27 19:36:16 cachyos krdpserver[2651]: [19:36:16:843] [2651:00000a5b] [WARN][com.freerdp.core.rdp] - [rdp_send_deactivate_all][0x55c2f267f9b0]: rdpMcs::userId == 0, skip sending PDU_TYPE_DEACTIVATE_ALL
7月 27 19:36:20 cachyos krdpserver[2651]: New client connected:  Windows platform Windows NT
7月 27 19:36:20 cachyos unix_chkpwd[5294]: check pass; user unknown
7月 27 19:36:20 cachyos unix_chkpwd[5294]: password check failed for user (alfred)
7月 27 19:36:20 cachyos krdpserver[2651]: pam_unix(login:auth): authentication failure; logname=alfred uid=1000 euid=1000 tty= ruser= rhost=  user=alfred
7月 27 19:36:22 cachyos krdpserver[2651]: pam_authenticate failure: 身份验证服务无法检索神身份验证信息
7月 27 19:36:22 cachyos krdpserver[2651]: [19:36:22:312] [2651:00001424] [ERROR][com.freerdp.api] - [rdp_peer_handle_state_active]: PostConnect for peer 0x55c2f2470f70 failed
7月 27 19:36:22 cachyos krdpserver[2651]: [19:36:22:312] [2651:00001424] [ERROR][com.freerdp.core.transport] - [transport_check_fds]: transport_check_fds: transport->ReceiveCallback() - STATE_RUN_FAILED [-1]



7月 27 19:36:56 cachyos krdpserver[2651]: [19:36:56:027] [2651:000015af] [ERROR][com.freerdp.core.transport] - [transport_read_layer]: BIO_read retries exceeded
7月 27 19:36:56 cachyos krdpserver[2651]: [19:36:56:027] [2651:000015af] [ERROR][com.freerdp.core.peer] - [transport_read_layer]: ERRCONNECT_CONNECT_TRANSPORT_FAILED [0x0002000D]
7月 27 19:36:56 cachyos krdpserver[2651]: [19:36:56:038] [2651:00000a5b] [WARN][com.freerdp.core.rdp] - [rdp_send_deactivate_all][0x55c2f2653700]: rdpMcs::userId == 0, skip sending PDU_TYPE_DEACTIVATE_ALL
7月 27 19:36:56 cachyos krdpserver[2651]: [19:36:56:039] [2651:00000a5b] [WARN][com.freerdp.core.rdp] - [rdp_send_deactivate_all][0x55c2f2653700]: rdpMcs::userId == 0, skip sending PDU_TYPE_DEACTIVATE_ALL
7月 27 19:36:59 cachyos krdpserver[2651]: New client connected:  Windows platform Windows NT
7月 27 19:36:59 cachyos unix_chkpwd[5574]: check pass; user unknown
7月 27 19:36:59 cachyos unix_chkpwd[5574]: password check failed for user (alfred)
7月 27 19:36:59 cachyos krdpserver[2651]: pam_unix(login:auth): authentication failure; logname=alfred uid=1000 euid=1000 tty= ruser= rhost=  user=alfred
7月 27 19:37:01 cachyos krdpserver[2651]: pam_authenticate failure: 身份验证服务无法检索神身份验证信息
7月 27 19:37:01 cachyos krdpserver[2651]: [19:37:01:948] [2651:000015b4] [ERROR][com.freerdp.api] - [rdp_peer_handle_state_active]: PostConnect for peer 0x55c2f2470f70 failed
7月 27 19:37:01 cachyos krdpserver[2651]: [19:37:01:948] [2651:000015b4] [ERROR][com.freerdp.core.transport] - [transport_check_fds]: transport_check_fds: transport->ReceiveCallback() - STATE_RUN_FAILED [-1]
^C                                                                                                                                                                                                                                      /1m8.1s

用户名不对吧

要真是密码不对这种问题,我就不会求助了。密码完全正确,用AI也没搞定

这个消息是源码里的helper_verify_password函数打印的[1]

这个是在调用helper_verify_password函数失败之后打印的[2]

看起来就是访问用户数据库时出了问题,导致无法检查密码,从而报错。考虑到你仅在krdp中报错,是不是你的krdp用了什么沙盒之类的东西导致suid失效了呀?

另外你不过滤日志看看?通常来说,在日志里找到线索之后应当不进行任何过滤以便发现更多异常信息。你可以看看出问题时间点附近的日志。


  1. https://github.com/linux-pam/linux-pam/blob/ddab692c8409c9a3b5613bd21638dea404ba4edf/modules/pam_unix/passverify.c#L1062 ↩︎

  2. https://github.com/linux-pam/linux-pam/blob/ddab692c8409c9a3b5613bd21638dea404ba4edf/modules/pam_unix/unix_chkpwd.c#L174 ↩︎

mkdir -p ~/.config/systemd/user/app-org.kde.krdpserver.service.d
cat > ~/.config/systemd/user/app-org.kde.krdpserver.service.d/override.conf << 'EOF'
[Service]
NoNewPrivileges=false
EOF
systemctl --user daemon-reload
systemctl --user restart app-org.kde.krdpserver.service

通过这个方式完成修复了

居然有NoNewPrivileges——这显然没办法完成鉴权啊……正确的做法是完成鉴权之后进程自己drop privileges。看看是谁加的,去报个bug吧。