当我使用 Debian 或 Ubuntu 时,我学到的第一件事就是创建一个快捷方式(在我的情况下是Ctr+ Alt+ T)来打开终端。为此,我使用代码创建了一个新的键盘快捷键(在 X 系统的选项>键盘中)x-terminal-emulator
。这似乎很简单,就像一个 bash 命令:在终端中输入此命令也会生成一个终端窗口。
目前我正在使用 Debian 9.5 (Stretch),我正在尝试为新的外部键盘定义一些快捷方式。但是,当我尝试为可以从终端使用的其他命令创建快捷方式(例如firefox
或echo "$"
)时,快捷方式不起作用。我似乎找不到关于创建快捷方式需要什么类型的命令的良好文档,但它似乎不太接受 bash 命令。
答案1
当我使用 Debian 或 Ubuntu 时,我学到的第一件事就是创建一个快捷方式(在我的情况下是Ctr+ Alt+ T)来打开终端。为此,我使用代码 x-terminal-emulator 创建了一个新的键盘快捷键(在 X 系统的选项>键盘中)
有两种类型的快捷方式。其中一些由桌面环境管理 - 比如Ctr+ Alt+ T。不同的桌面环境管理不同的快捷方式集。GNOME、Unity、LXDE、MATE 等桌面 - 它们内置了相关代码,如果不重新编译桌面环境代码,您无法真正更改这些快捷方式。Openbox、Blackbox 等桌面 - 它们不管理这些快捷方式。您所学到的知识应在您的桌面环境范围内考虑。您不需要为x-terminal-emulator
GNOME 等我之前提到的桌面声明快捷方式,因为它们已经管理了这些。
但是,当我尝试为可以从终端使用的其他命令(例如 Firefox 或 echo“$”)创建快捷方式时,该快捷方式不起作用。
自定义快捷方式 - 您自己声明的 - 操作可执行文件,也就是说,你必须指定磁盘上存在的有效文件,例如,/bin/bash
或者至少是变量下列出的目录之一中存在的命令。按下快捷方式时,$PATH
桌面环境将运行syscall 来启动该应用程序。这也是为什么不起作用的原因——没有 shell 来理解它的含义。shell 变量只在 shell 内部有意义。那么你该怎么做?告诉快捷方式启动 shell!通常这是通过短命令完成的,或者使用脚本,在脚本顶部有适当的行。所以要记住的关键是快捷方式不运行 shell 命令,而是运行可执行文件。要给出一个使用 的实际例子,请参阅execve()
echo $?
$?
bash -c 'echo $?'
#!
bash -c '...'
如何创建执行 xdotool 命令来模拟按键的快捷方式?
至于为什么firefox
对你不起作用,firefox
可能是检查现有打开的窗口或存在其他错误。考虑执行此操作bash -c 'firefox > 2>&1 foxlogfile.txt'
以找出问题的原因或可能出现的任何错误。
我似乎找不到关于创建快捷方式采用什么样的命令的良好文档,但它似乎并不完全接受 bash 命令。
简短的回答 - 确实没有这样的文档。只要您记住快捷方式使用可执行文件而不是 shell 命令,这就是您真正需要的。当然,您需要知道在桌面上声明快捷方式的方法是什么 - 例如,Openbox 方法与 GNOME 不同。
PS:实际上,还有第三种类型的快捷方式,但它们与桌面环境无关,即它们不是 GUI 快捷方式。bash
读取~/.inputrc
文件,您可以在其中声明要针对特定组合键执行的某些命令。但是,这超出了本问题的范围,是另一个主题。请参阅这举个例子。
PS2:基于 GNOME 的桌面(例如 Unity)利用 GSettings 和 DConf 数据库将特定设置应用于每个桌面用户。因此,这些环境下的快捷方式可以通过命令行进行控制和设置,但同样的概念也适用 - 它们必须是可执行文件或桌面环境可以识别的东西,因为它在桌面环境的代码中。请参阅本文关于我的一个在 Unity 下禁用 Super 键的脚本Jacob Vlijm 的回答通过终端设置快捷方式(请记住这仅适用于基于 GNOME 的终端)。