#!/usr/bin/python3 """App-scoped native Wayland QQ/Teams checks with separate application profiles. Never imports the host IBus/Fcitx launchers or modifies their desktop entries. """ import argparse import importlib.util import os from pathlib import Path import subprocess ROOT=Path(__file__).resolve().parents[1] spec=importlib.util.spec_from_file_location("preview",ROOT/"scripts/rime-preview.py") p=importlib.util.module_from_spec(spec);spec.loader.exec_module(p) APPS={"qq":"/usr/bin/linuxqq","teams":"/usr/bin/teams-for-linux-electron"} def unit(name):return f"ferese-rime-app-{name}-20261028.service" if __name__=="__main__": parser=argparse.ArgumentParser();parser.add_argument("action",choices=[*APPS,"stop","status"]);args=parser.parse_args() if args.action=="stop": for name in APPS:subprocess.run(["systemctl","--user","stop",unit(name)],capture_output=True) elif args.action=="status": for name in APPS:print(name,p.prop(unit(name),"ActiveState")) else: name=args.action;p.start() if p.prop(unit(name),"ActiveState")=="active":print(f"{name} test instance is already running") else: data=p.DATA/f"app-{name}";data.mkdir(mode=0o700,exist_ok=True);data.chmod(0o700) command=[APPS[name],"--ozone-platform=wayland","--enable-wayland-ime","--wayland-text-input-version=3",f"--user-data-dir={data}"] if name=="qq":command += ["--no-sandbox"] p.start_unit(unit(name),command,p.child_environment(),"2G") print(f"{name} native Wayland validation instance opened")