通过dbus将Ctrl-L发送到终端仿真器

时间:2016-01-15 15:33:13

标签: linux terminal dbus konsole

可以通过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 both)

1 个答案:

答案 0 :(得分:1)

这对我有用:

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

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

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

第三,如果程序期望从终端输入(例如irbpython),Ctrl-L将起作用,但它不适用于while sleep 1; do echo Still running; done循环。< / p>