1

可以通过 dbus 将文本发送到终端模拟器 konsole,如下所示:

qdbus org.kde.konsole /Sessions/1 sendText "hello"

但是我想远程清除指定终端窗口的屏幕。所以我尝试了:

qdbus org.kde.konsole /Sessions/1 runCommand "clear"

部分做我想要的。唯一的问题:当有一个进程正在运行时,屏幕不会被清除。

在终端模拟器中,在这种情况下,组合键“Ctrl + L”可以完成这项工作。

所以我试图为这个快捷方式发送一个带有转义字符的字符串。这行得通吗?然而,这并不奏效;

qdbus org.kde.konsole /Sessions/1 sendText "\033[2J"

(runCommand 都不是)

4

1 回答 1

1

这对我有用:

qdbus org.kde.konsole /Sessions/1 sendText $'\014'

首先,要从八进制代码生成一个字符,语法"\033"在 C 中可以工作,但在 Bash 中不行。

其次,虽然“ESC [2 J”是用于擦除屏幕的 VT100 代码,但它仅在 I 时才对我有效echo $'\033[2J',并且如果命令正在运行则将不起作用。

第三,如果程序期待来自终端的输入(likeirbpythondo),Ctrl-L 将起作用,但它不适用于while sleep 1; do echo Still running; done循环。

于 2016-09-12T13:47:17.197 回答