Mal*_*rba 61 gnome bash ubuntu
有没有办法在 bash 命令行中将焦点放在正在运行的进程的特定窗口上。假设我知道进程的名称、编号以及我需要的任何其他信息。
例如,如果我有一个 Firefox 实例正在运行,但是它被最小化了(或者它上面有一些其他窗口)。我需要一个 bash 命令,通过将其设置为活动窗口来调出并聚焦到 Firefox 窗口。
Mal*_*rba 89
wmctrl 命令似乎可以完成这项工作。它已经为我安装,但它可以在存储库中使用,以防有人需要它。
wmctrl -l
Run Code Online (Sandbox Code Playgroud)
列出当前打开的窗口(包括 gnome 面板)。
wmctrl -a STRING
Run Code Online (Sandbox Code Playgroud)
将焦点放在标题中包含 STRING 的窗口上。如果多个窗口满足该条件,我不确定会发生什么。
在我的情况下,命令是:
wmctrl -a Firefox
Run Code Online (Sandbox Code Playgroud)
Chr*_*her 12
使用wmctrl
与组合xdotool
,你可以切换焦点到Firefox,然后执行键盘或鼠标操作。
在这个例子中:
wmctrl -R firefox && \
xdotool key --clearmodifiers ctrl+t ctrl+l && \
xdotool type --delay=250 google && \
xdotool key --clearmodifiers Tab Return
Run Code Online (Sandbox Code Playgroud)
执行以下步骤:
小智 7
我在 ubuntu 电脑中使用的以下脚本如何?用例是这样的。
$ ./focus_win.sh 1 # focus on a application window that executed at first
$ ./focus_win.sh 2 # second executed application window
Run Code Online (Sandbox Code Playgroud)
我在键盘自定义快捷方式中分配它后使用它。ctrl+1, ctrl+2, ...
猫focus_win.sh
#! /bin/sh
if [ "" = "$1" ] ; then
echo "usage $0 <win index>"
exit 1;
fi
WIN_ID=`wmctrl -l | cut -d ' ' -f1 | head -n $1 | tail -n 1`
if [ "" = "$WIN_ID" ] ; then
echo "fail to get win id of index $1"
exit 1;
fi
wmctrl -i -a $WIN_ID
Run Code Online (Sandbox Code Playgroud)
遗憾的是,出于安全原因,这不再适用于 Gnome 41
在 Looking Glass 中运行global.context.unsafe_mode = true
会重新启用该功能,但只是暂时的。
在 Wayland 上,遗憾的是wmctrl
,它xdotool
不起作用。相反,我们可以与窗口管理器对话。
对于 Gnome,我们可以运行gdbus
发送 DBUS 消息来执行一些 GJS(GNOME C API 的 JavaScript 绑定)。
聚焦窗口:
$ gdbus call \
--session \
--dest org.gnome.Shell \
--object-path /org/gnome/Shell \
--method org.gnome.Shell.Eval "
var mw =
global.get_window_actors()
.map(w=>w.meta_window)
.find(mw=>mw.get_title().includes('Firefox'));
mw && mw.activate(0)"
Run Code Online (Sandbox Code Playgroud)
也可以看看:
您可以使用 Gnome 的“Looking Glass”调试器来尝试 GJS 中的可能性:Alt+F2,然后运行lg
归档时间: |
|
查看次数: |
48242 次 |
最近记录: |