You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在KDE Konsole的bash脚本中获取对应窗口的Konsole_nn编号

如何在KDE Konsole的bash脚本中获取对应窗口的Konsole_nn编号

咱们先从简单的需求入手——获取当前bash所在的Konsole窗口编号,这个其实很容易实现,因为Konsole启动shell时会把窗口的相关信息通过环境变量传递给它。

你可以直接读取$KONSOLE_DBUS_SESSION这个环境变量,然后从中提取出编号。比如在脚本里加入这段代码:

# 提取当前Konsole窗口的编号
current_konsole_num=$(echo "$KONSOLE_DBUS_SESSION" | grep -oP '(?<=konsole-)\d+')
echo "当前bash所在的Konsole编号是:Konsole $current_konsole_num"

解释一下:$KONSOLE_DBUS_SESSION的格式一般是org.kde.konsole-XXXX,其中XXXX就是你要找的nn数字,用grep的正则匹配就能轻松把它抽出来。

接下来是更复杂的需求:根据指定的/dev/pts/mm来找到对应的Konsole_nn编号。这个需要结合进程信息和DBus查询来完成,步骤如下:

  1. 先找到对应pts的bash进程ID(PID)
  2. 顺着PID找到它的父进程——也就是对应的Konsole进程
  3. 通过DBus查询该Konsole进程对应的窗口编号

你可以用下面的脚本片段来实现:

# 替换成你要查询的pts编号,比如mm=3就写3
target_pts=3

# 1. 找到对应pts的bash PID
bash_pid=$(lsof -t "/dev/pts/$target_pts" | grep -E 'bash$')

if [ -z "$bash_pid" ]; then
    echo "没有找到对应/dev/pts/$target_pts的bash进程"
    exit 1
fi

# 2. 找到bash的父进程(Konsole的进程)
konsole_pid=$(ps -o ppid= -p "$bash_pid" | xargs)

# 3. 通过DBus查询该Konsole进程对应的窗口编号
konsole_sessions=$(qdbus org.kde.konsole /Sessions)

for session in $konsole_sessions; do
    # 获取该会话对应的进程ID
    session_pid=$(qdbus org.kde.konsole "$session" processId)
    if [ "$session_pid" -eq "$konsole_pid" ]; then
        # 提取会话中的编号
        konsole_num=$(echo "$session" | grep -oP '(?<=Session)\d+')
        echo "/dev/pts/$target_pts 对应的Konsole编号是:Konsole $konsole_num"
        exit 0
    fi
done

echo "没有找到对应/dev/pts/$target_pts的Konsole窗口编号"

注意:这个方法需要你的系统安装了qdbus(KDE桌面通常自带)和lsof工具,如果没有的话,用你的包管理器安装即可。

另外要提醒一下,有时候系统中会存在多个Konsole进程对应不同窗口,这个脚本会准确匹配到对应pts的bash进程的父Konsole,进而提取出正确的窗口编号。

备注:内容来源于stack exchange,提问作者Anton Wessel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 15:37:32