麒麟os应用窗口启动位置不固定,最稳定方法是用--geometry参数强制指定坐标尺寸,适用于原生gtk应用;electron类应用可用--window-position或wmctrl脚本补位;辅以dconf启用ukui位置记忆。

银河麒麟系统中,应用窗口每次启动都跳回左上角或随机位置,无法保持上次关闭时的坐标,是因为默认未启用窗口位置记忆策略或应用本身不响应GNOME/Mutter的坐标缓存机制。必须绕过系统级记忆失效问题,直接在启动阶段注入精确坐标参数。
用--geometry参数强制指定窗口初始位置与尺寸
这是目前在麒麟OS下最稳定、最通用的方法,适用于gedit、evince、xfce4-terminal等原生GTK应用,也兼容多数支持X11协议的跨平台程序。它不依赖桌面环境的记忆功能,而是由应用自身解析并定位,因此不受dconf重置、会话刷新或UKUI配置开关影响。
第一步:确认目标应用是否支持--geometry参数。在终端中执行gedit --help | grep geometry,若输出含“--geometry”字样即支持;若无返回,可尝试直接加参数启动观察效果。
第二步:确定所需坐标。例如希望窗口宽1024像素、高768像素,左上角距离屏幕左侧120像素、顶部80像素,则参数为--geometry=1024x768+120+80。注意格式严格:不能有空格,x和+均为英文半角字符。
第三步:修改该应用的.desktop启动文件。进入/usr/share/applications/或~/.local/share/applications/,找到对应文件(如gedit.desktop),用文本编辑器打开。
第四步:定位到Exec=开头的行,在其末尾添加空格后追加--geometry=1024x768+120+80。确保整行命令仍以可执行路径起始,例如:Exec=gedit --geometry=1024x768+120+80 %U。
第五步:保存文件后,执行sudo update-desktop-database刷新桌面数据库。此后从开始菜单或桌面图标启动该程序,窗口将严格按指定坐标与尺寸打开。
为Electron类应用(如微信、VS Code)设置固定启动位置
这类应用通常忽略--geometry,但部分版本支持--window-position或通过环境变量控制。实测有效方案如下:
方法一:使用--window-position(仅限新版Electron)
修改.desktop文件中Exec行,例如微信:Exec=/opt/apps/com.qq.im/files/run.sh --window-position=150,90。注意此处用英文逗号分隔x,y,且不带单位。
方法二:通过wmctrl脚本补位(推荐,兼容性最强)
先确保已安装:sudo apt install wmctrl。
编写启动脚本~/bin/wechat-fixed.sh,内容为:
#!/bin/bash
/opt/apps/com.qq.im/files/run.sh &
sleep 0.8
wmctrl -r "微信" -e 0,150,90,-1,-1
其中0,150,90,-1,-1表示:gravity(忽略)、x、y、width、height,-1代表保持原尺寸。
【关键提醒】sleep时间必须足够让窗口完成映射,太短会导致wmctrl找不到窗口;0.8秒在多数硬件上稳妥,若遇失败可增至1.2秒。
方法三:在.desktop文件中调用脚本
将Exec改为:Exec=sh -c "~/bin/wechat-fixed.sh",并赋予脚本可执行权限:chmod +x ~/bin/wechat-fixed.sh。
通过dconf禁用自动重排并启用UKUI位置记忆
此方法作为辅助手段,对原生UKUI应用(如ukui-control-center、ukui-screenshot)生效,但无法单独解决第三方应用问题。必须配合前两种方法使用才完整。
打开终端,依次执行以下命令:
dconf write /org/ukui/desktop/wm/preferences/remember-app-position true
dconf write /org/ukui/desktop/wm/preferences/remember-app-size true
dconf write /org/ukui/desktop/wm/preferences/auto-move-to-current-workspace false
执行ukwm --replace &重启窗口管理器使配置即时生效。此时gedit、ukui-text-editor等应用关闭后再打开,将恢复上次位置与大小。
若执行后无效,检查是否误改了路径——UKUI的schema是/org/ukui/...,不是/org/gnome/...,写错路径不会报错但完全不生效。











