在 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 和其他应用的正常使用能力。视觉上接近真正全屏,操作上却比独占全屏更加灵活。

Leave a Reply

Your email address will not be published. Required fields are marked *