作者:E4b9a6, 创建:2022-07-13, 字数:1181, 已阅:248, 最后更新:2024-03-10
大部分Linux桌面都会提供全局快捷键设置,如默认的 ctrl+alt+t
全局快捷键打开终端程序
快捷键是提高工作效率的利器,但体验下来,多次使用快捷键 ctrl+alt+t
会开启了多个Terminal,时间一长不但不方便又难管理
其他程序如文件资源管理器,使用 meta+e
的情况也类似于上述,于是考虑编写了一个脚本实现
我的桌面的kde plasma 5.27.6
,借助xdotool
和wmctrl
工具可以实现以上需求
以快捷键ctrl+alt+t
实现打开Ksonsole终端为例
编辑xdotool.sh
如下
#/bin/bash
#author:chancel
#date:2022-07-13
cmd="wmctrl -l | grep -i $1 | awk '{print \$1}'"
result=`eval $cmd`
if [[ "$result" ]]
then
# active window if window exist
xdotool windowactivate $result
else
# launch application if window not exist
$2
fi
运行上面的脚本,第一个参数是程序名称,第二个名称是程序启动路径,如下
xdotool konsole /usr/bin/konsole
请确保xdotool
和wmctrl
已安装,实验没问题后将ctrl+alt+t
注册未执行上面的命令即可
经过一段时间的使用,效果非常不错,但有一点不太理想,多个桌面下,容易出现按快捷键从第二个桌面跳到第一个的konsole
上,解决方法如下
#!/bin/bash
#author:chancel.yang
#date:2023-08-10
desktop=$(xdotool get_desktop)
cmd="wmctrl -l | grep -i $1 | awk -v desktop=$desktop '\$2 == desktop { id = \$1 } END { print id }'"
result=$(eval $cmd)
if [[ "$result" ]]; then
# 如果窗口存在,则在当前桌面激活窗口
xdotool windowactivate $result
else
# 如果窗口不存在,则启动应用程序
$2 &
fi
利用awk分析当前焦点桌面,再定位激活即可