在 4K 显示器和 KDE Plasma Wayland 环境中运行 Waydroid 时,默认的 Full UI 往往会铺满整个可用桌面。对于将 Waydroid 长期作为“大尺寸横屏 Android 平板”使用的场景,这种显示方式很自然,但也可能因为界面过宽,导致部分应用布局不够协调。
一次优化尝试将 Waydroid 改成了固定的 16:10 窗口。尺寸和比例虽然更接近平板设备,但随后出现了新的问题:窗口固定在屏幕左上角,右侧和下方留下明显空白,整体观感反而不如最初的铺满状态。
最终没有继续强行控制窗口坐标,而是取消固定尺寸,并结合 KDE Panel 的 Dodge Windows 模式,实现了更自然的沉浸式显示效果。
一、环境与目标
使用环境大致如下:
- KDE Plasma
- Wayland 会话
- 4K 显示器
- 桌面缩放比例:150%
- Waydroid 使用 Full UI
- 目标形态:横屏大尺寸 Android 平板
- 不使用 Waydroid 多窗口模式
显示器的物理分辨率为:
3840 × 2160
在 150% 缩放下,KDE 使用的逻辑分辨率约为:
2560 × 1440
左侧 Plasma Panel 原本固定占用:
40 个逻辑像素
因此普通最大化窗口最初会从:
x = 40
y = 0
开始显示。
二、将 Waydroid 改成 16:10 固定窗口
为了让 Waydroid 更接近常见大屏 Android 平板的比例,曾设置以下属性:
waydroid prop set persist.waydroid.multi_windows false
waydroid prop set persist.waydroid.width 2240
waydroid prop set persist.waydroid.height 1400
2240 × 1400 正好是 16:10。
由于桌面使用 150% 缩放,它对应的物理显示尺寸为:
2240 × 1.5 = 3360
1400 × 1.5 = 2100
即:
3360 × 2100
放在 3840 × 2160 的屏幕上,理论上会留下:
水平剩余:480 个物理像素
垂直剩余:60 个物理像素
理想位置应当是右侧贴边、上下居中:
逻辑坐标:x = 320,y = 20
物理坐标:x = 480,y = 30
但实际启动后,Waydroid 出现在左上区域:
x = 40
y = 0
width = 2240
height = 1400
其中 x = 40 正好来自左侧 Panel 的宽度。
三、尝试使用 KDE Window Rules 调整位置
首先尝试通过以下界面为 Waydroid 设置窗口位置:
System Settings
→ Window Management
→ Window Rules
Waydroid 的窗口属性能够被 KDE 正确识别:
Caption: Waydroid
Window class: Waydroid
Desktop file: Waydroid
Window type: Normal Window
尝试过的规则策略包括:
Apply Initially
Remember
Force
Force Temporarily
目标位置设置为:
320, 20
还尝试添加:
Ignore requested geometry
但无论重新启动 Waydroid,还是重新加载 KWin 配置,窗口位置始终没有变化。
这说明问题并不是窗口匹配条件错误,也不是坐标计算错误。
四、确认 Waydroid 是否属于普通窗口
为了排除 Waydroid Full UI 并非普通桌面窗口的可能性,使用 KWin 提供的窗口查询接口:
qdbus6 org.kde.KWin /KWin org.kde.KWin.queryWindowInfo
点击 Waydroid 窗口后,可以得到类似结果:
caption: Waydroid
desktopFile: Waydroid
fullscreen: false
height: 1400
resourceClass: Waydroid
type: 0
width: 2240
x: 40
y: 0
这说明 Waydroid Full UI 确实是由 KWin 管理的窗口对象,具有:
- 标题
- PID
- UUID
- 窗口类
- 宽度和高度
- X、Y 坐标
- 最大化与全屏状态
因此,“Waydroid 根本不是窗口”这一猜测可以排除。
五、尝试通过 KWin 脚本移动窗口
随后又通过 KWin Scripting Console 尝试直接修改窗口的 frameGeometry。
启动控制台:
plasma-interactiveconsole --kwin
脚本逻辑大致如下:
for (const w of workspace.stackingOrder) {
if (w.resourceClass === "Waydroid") {
const g = w.frameGeometry;
w.frameGeometry = Qt.rect(
320,
20,
g.width,
g.height
);
}
}
还尝试过:
- 按窗口标题匹配
- 按 Desktop File 匹配
- 按 PID 精确匹配
- 检查窗口是否可移动
- 执行后再次读取窗口坐标
但 Waydroid 仍然保持:
x = 40
y = 0
这意味着在当前环境中,通过 KWin Window Rules 或简单 KWin 脚本改变 Waydroid Full UI 的绝对位置并不可靠。
继续反复切换规则策略,已经没有实际价值。
六、重新评估固定 16:10 窗口的必要性
固定为 2240 × 1400 后,虽然获得了标准的 16:10 比例,但也带来了明显缺点:
- 窗口无法稳定移动到预期位置
- 右侧留下大块桌面空白
- 上下仍有少量空隙
- 整体视觉不如原来的铺满状态
- 为窗口位置增加了不必要的维护复杂度
对于主要作为“大屏横向 Android 平板”使用的 Waydroid,铺满屏幕其实更符合预期。
因此,最终决定撤销固定宽度和高度。
七、取消固定尺寸
执行:
waydroid prop set persist.waydroid.width ''
waydroid prop set persist.waydroid.height ''
waydroid prop set persist.waydroid.multi_windows false
然后停止当前 Waydroid Session:
waydroid session stop
重新启动 Full UI:
waydroid show-full-ui
同时删除或禁用之前创建的 Waydroid Window Rule,避免遗留规则继续干扰窗口行为。
KWin Scripting Console 中临时执行的代码不会持久保存,关闭控制台即可。
八、将左侧 Panel 改为 Dodge Windows
左侧 Panel 原本固定占用 40 个逻辑像素,因此最大化窗口只能使用:
x = 40
width = 2520
为了让 Waydroid 视觉上铺满整个 2560 像素宽的逻辑桌面,将 Panel 的可见性模式改为:
Dodge Windows
设置后,Panel 不再长期占用桌面空间。
当 Waydroid 最大化时:
- Waydroid 可以铺满整个屏幕
- 左侧 Panel 自动隐藏
- 鼠标移动到屏幕最左边时,Panel 会重新出现
- Panel 出现时不会破坏 Waydroid 的整体全屏观感
- 切换和使用其他桌面应用仍然正常
最终显示效果接近:
x = 0
y = 0
width = 2560
height = 1440
对应完整的物理屏幕:
3840 × 2160
九、最大化窗口与真正全屏的区别
这种状态从视觉上看是全屏,但严格来说更接近“铺满桌面的最大化窗口”。
查询结果可能仍然显示:
fullscreen: false
这并不代表配置失败。
它与真正独占式全屏的区别在于:
- Panel 仍然可以通过鼠标触发
- 其他应用切换更自然
- 不需要 Waydroid 主动进入特殊全屏状态
- 不会影响桌面窗口管理逻辑
对于 Waydroid,这种形式反而比真正的独占全屏更加实用。
十、横屏和平板属性不需要撤销
取消窗口宽高覆盖,只影响 Full UI 的窗口尺寸,不需要撤销其他已经验证有效的 Android 配置。
例如:
sudo waydroid shell settings put system accelerometer_rotation 0
sudo waydroid shell settings put system user_rotation 0
sudo waydroid shell wm set-ignore-orientation-request true
这些设置分别用于:
- 禁止自动旋转
- 固定横屏方向
- 忽略应用自行请求竖屏
平板设备识别属性也可以继续保留:
ro.build.characteristics=tablet
最终 Waydroid 仍然会以横屏大平板形态运行,只是不再固定为 2240 × 1400。
十一、最终配置
最终采用的方案为:
Waydroid Full UI
+ 关闭多窗口模式
+ 取消固定 width 和 height
+ 保留横屏设置
+ 保留 tablet 设备属性
+ KDE 左侧 Panel 使用 Dodge Windows
核心命令:
waydroid prop set persist.waydroid.multi_windows false
waydroid prop set persist.waydroid.width ''
waydroid prop set persist.waydroid.height ''
waydroid session stop
waydroid show-full-ui
不再使用:
- 固定
2240 × 1400 - Waydroid 专用 Window Rule
- 强制窗口绝对坐标
- 持续运行的 KWin 移动脚本
结语
固定 16:10 窗口看似能够获得更标准的平板比例,但在大尺寸 4K 屏幕上,窗口位置、桌面留白和管理复杂度可能抵消这一优势。
最终效果更好的方案并不是继续强制调整 Waydroid 的窗口坐标,而是让 Waydroid 恢复最大化显示,再由 KDE Panel 的 Dodge Windows 模式释放屏幕空间。
这样既保留了完整的大屏 Android 体验,也保留了桌面 Panel 和其他应用的正常使用能力。视觉上接近真正全屏,操作上却比独占全屏更加灵活。