破案了,opensuse 上的 KDE 设置模块的 krdp 没有生效,开了之后 ss -tulnp 没有显示监听,手动启动就可以了
。没事干是真的很恐怖,排查问题真讨厌,也很能杀时间 ![]()
学姐,有啥进展不?
https://bugs.kde.org/show_bug.cgi?id=511940
向上游反馈了几个月,貌似也没人帮忙看下。。。自己靠ai搞了个临时解决方案,貌似是因为屏幕名称不一致,导致plasma-shell一直在等待"m_delayTimer->start()"且没有超时机制,无限等待下去了,没太搞明白更底层的原因。。。
顺便把krfb wayland下高分屏缩放后鼠标指针问题也搞了下:
diff -uNr krfb-26.04.0_orig/events/xdp/xdpevents.cpp krfb-26.04.0/events/xdp/xdpevents.cpp
--- krfb-26.04.0_orig/events/xdp/xdpevents.cpp 2026-04-08 20:50:44.000000000 +0800
+++ krfb-26.04.0/events/xdp/xdpevents.cpp 2026-04-24 12:56:06.434774808 +0800
@@ -15,6 +15,8 @@
#include <QApplication>
#include <QGlobalStatic>
+#include <QGuiApplication>
+#include <QScreen>
class EventData
{
@@ -23,8 +25,8 @@
//mouse
int buttonMask = 0;
- int x = 0;
- int y = 0;
+ double x = 0.0;
+ double y = 0.0;
QScopedPointer<OrgFreedesktopPortalRemoteDesktopInterface> dbusXdpRemoteDesktopService;
@@ -60,10 +62,22 @@
return;
}
- if (x != data->x || y != data->y) {
- data->dbusXdpRemoteDesktopService->NotifyPointerMotionAbsolute(sessionHandle, QVariantMap(), streamNodeId, x, y);
- data->x = x;
- data->y = y;
+ double dpr = 1.0;
+ if (QScreen *screen = QGuiApplication::primaryScreen()) {
+ dpr = screen->devicePixelRatio();
+ }
+
+ if (dpr <= 0.0) {
+ dpr = 1.0;
+ }
+
+ double logical_x = (double)x / dpr;
+ double logical_y = (double)y / dpr;
+
+ if (logical_x != data->x || logical_y != data->y) {
+ data->dbusXdpRemoteDesktopService->NotifyPointerMotionAbsolute(sessionHandle, QVariantMap(), streamNodeId, logical_x, logical_y);
+ data->x = logical_x;
+ data->y = logical_y;
}
if (buttonMask != data->buttonMask) {
然而,krfb的延迟比x11vnc的延迟高了2秒以上。。。。wayland还是依托,唉。。。

