menu Chancel's blog
rss_feed
Chancel's blog
有善始者实繁,能克终者盖寡。

设置Linux桌面全局快捷键打开唯一一个Ksonsole终端

作者:Chancel Yang, 创建:2022-07-13, 字数:1180, 已阅:189, 最后更新:2024-03-10

这篇文章更新于 124 天前,文中部分信息可能失效,请自行甄别无效内容。

大部分Linux桌面都会提供全局快捷键设置,如默认的 ctrl+alt+t 全局快捷键打开终端程序

快捷键是提高工作效率的利器,但体验下来,多次使用快捷键 ctrl+alt+t 会开启了多个Terminal,时间一长不但不方便又难管理

其他程序如文件资源管理器,使用 meta+e 的情况也类似于上述,于是考虑编写了一个脚本实现

  • 程序已运行则激活程序前台显示
  • 程序未运行则启动程序

我的桌面的kde plasma 5.27.6,借助xdotoolwmctrl工具可以实现以上需求

以快捷键ctrl+alt+t实现打开Ksonsole终端为例

编辑xdotool.sh如下

Bash
#/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

运行上面的脚本,第一个参数是程序名称,第二个名称是程序启动路径,如下

Bash
xdotool konsole /usr/bin/konsole

请确保xdotoolwmctrl已安装,实验没问题后将ctrl+alt+t注册未执行上面的命令即可

经过一段时间的使用,效果非常不错,但有一点不太理想,多个桌面下,容易出现按快捷键从第二个桌面跳到第一个的konsole上,解决方法如下

Bash
#!/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分析当前焦点桌面,再定位激活即可


[[replyMessage== null?"发表评论":"发表评论 @ " + replyMessage.m_author]]

account_circle
email
web_asset
textsms

评论列表([[messageResponse.total]])

还没有可以显示的留言...
gravatar
[[messageItem.m_author]] [[messageItem.m_author]]
[[messageItem.create_time]]
[[getEnviron(messageItem.m_environ)]]
[[subMessage.m_author]] [[subMessage.m_author]] @ [[subMessage.parent_message.m_author]] [[subMessage.parent_message.m_author]]
[[subMessage.create_time]]
[[getEnviron(messageItem.m_environ)]]