1 个不稳定版本
0.2.1 | 2023年11月23日 |
---|
#1950 在 命令行工具 中
41KB
783 行
kdotool - KDE Wayland 的 xdotool 克隆
简介
出于安全考虑,Wayland 删除了大部分 xdotool 使用来模拟用户输入和控制窗口的 X11 API。 ydotool 通过直接与内核输入设备通信解决了输入部分。然而,对于窗口控制部分,您必须使用每个 Wayland 合成器的自有 API。
此程序使用 KWin 的脚本 API 来控制窗口。在每次调用中,它都会动态生成一个 KWin 脚本,将其加载到 KWin 中,运行它,然后通过 KWin 的 D-Bus 接口将其删除。
此程序应与 KDE 5 和即将到来的 KDE 6 兼容。它应与 Wayland 和 X11 会话兼容。(但您仍然可以在 X11 中使用原始的 xdotool
。所以这主要是为 Wayland 而设计的。)
并非所有 xdotool
命令都受支持。一些命令无法通过 KWin API 获取。一些可能甚至在 Wayland 中也不可能。有关详细信息,请参阅下文。
请参阅 xdotool 文档 了解每个命令的用法。
请注意,此程序使用的 窗口 ID
是 KWin 的内部窗口 ID,看起来像 UUID(例如 {04add7fb-72b8-4e58-8ac1-5e22730b907b}
)。它不是 X11 窗口 ID。
全局选项
--help
显示帮助。--version
显示版本。
xdotool 中未提供的选项
--dry-run
只打印生成的 KWin 脚本。不要运行它。--debug
打印调试消息。--shortcut _shortcut_
指定要运行的生成的 KWin 脚本的快捷键。快捷键必须采用modifier+key
格式,例如Alt+Shift+X
。快捷键将在 KWin 中注册。脚本不会立即运行。您必须按快捷键才能运行它。--name _name_
为快捷键指定名称,这样您就可以稍后使用--remove
删除它。此选项仅在--shortcut
下有效。
- --
remove _name_
删除之前注册的快捷键。
不在 xdotool 中的新命令
以下命令可用于链式命令中
savewindowstack _name_
将当前窗口堆栈保存到变量loadwindowstack _name_
加载先前保存的窗口堆栈
支持的 xdotool 命令
窗口查询
这些命令生成一个窗口堆栈,后续的 窗口动作 命令可以引用它。
search
- 缺失
--maxdepth
--onlyvisible
--sync
- 注意
--screen
(仅限 KDE 5)
- 缺失
getactivewindow
窗口动作
这些命令要么带有一个窗口-id 参数,要么使用窗口堆栈。
getwindowname
getwindowclassname
getwindowpid
getwindowgeometry
- 缺失:
--shell
- 注意: 仅在 KDE 5 中显示屏幕编号
- 缺失:
windowsize
- 缺失
--usehints
--sync
- 缺失
windowmove
- 缺失
--sync
- 缺失
windowminimize
- 缺失:
--sync
- 缺失:
windowraise
(仅限 KDE 6)- 使用
windowactivate
替代吗?
- 使用
windowactivate
- 缺失:
--sync
- 缺失:
- windowclose
set_desktop_for_window
get_desktop_for_window
windowstate
- 支持的属性
- above
- below
- skip_taskbar
- skip_pager
- fullscreen
- shaded
- demands_attention
- 缺失
- modal
- sticky
- hidden
- maximized_vert
- maximized_horz
- 支持的属性
全局动作
这些动作不是针对特定窗口,而是针对整个桌面。
set_desktop
get_desktop
set_num_desktops
(仅限 KDE 5)get_num_desktops
不支持
您可以使用 ydotool
、dotool
、wtype
等工具进行这些操作
- 键盘命令
- 鼠标命令
KWin 没有这样的功能
set_desktop_viewport
get_desktop_viewport
X11 特定
windowreparent
windowmap
windowunmap
不清楚我们是否可以支持
- 行为窗口动作命令
exec
sleep
- 脚本
KWin 有这样的功能,但没有公开到 js API
selectwindow
windowlower
windowquit
windowkill
getwindowfocus
: 使用getactivewindow
替代吗?windowfocus
: 使用windowactivate
替代吗?set_window
故障排除
如果任何操作无法正常工作,您可以使用 --debug
选项重新运行该命令。它将打印生成的 KWin 脚本,以及 KWin 脚本的输出。如果您认为这是一个错误,请创建一个 GitHub 上的问题。
依赖关系
~14-25MB
~397K SLoC