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 参数,要么使用窗口堆栈。
getwindownamegetwindowclassnamegetwindowpidgetwindowgeometry- 缺失:
--shell - 注意: 仅在 KDE 5 中显示屏幕编号
- 缺失:
windowsize- 缺失
--usehints--sync
- 缺失
windowmove- 缺失
--sync
- 缺失
windowminimize- 缺失:
--sync
- 缺失:
windowraise(仅限 KDE 6)- 使用
windowactivate替代吗?
- 使用
windowactivate- 缺失:
--sync
- 缺失:
- windowclose
set_desktop_for_windowget_desktop_for_windowwindowstate- 支持的属性
- above
- below
- skip_taskbar
- skip_pager
- fullscreen
- shaded
- demands_attention
- 缺失
- modal
- sticky
- hidden
- maximized_vert
- maximized_horz
- 支持的属性
全局动作
这些动作不是针对特定窗口,而是针对整个桌面。
set_desktopget_desktopset_num_desktops(仅限 KDE 5)get_num_desktops
不支持
您可以使用 ydotool、dotool、wtype 等工具进行这些操作
- 键盘命令
- 鼠标命令
KWin 没有这样的功能
set_desktop_viewportget_desktop_viewport
X11 特定
windowreparentwindowmapwindowunmap
不清楚我们是否可以支持
- 行为窗口动作命令
execsleep- 脚本
KWin 有这样的功能,但没有公开到 js API
selectwindowwindowlowerwindowquitwindowkillgetwindowfocus: 使用getactivewindow替代吗?windowfocus: 使用windowactivate替代吗?set_window
故障排除
如果任何操作无法正常工作,您可以使用 --debug 选项重新运行该命令。它将打印生成的 KWin 脚本,以及 KWin 脚本的输出。如果您认为这是一个错误,请创建一个 GitHub 上的问题。
依赖关系
~14-25MB
~397K SLoC