在类 Unix 操作系统上重新映射系统范围的密钥
Remapping keys system-wide on Unix-Like Operating Systems
最近我想做一个小工具,可以让我任意重新映射键盘上的键以对应不同的字符输入。
从系统编程的角度来看,这通常是如何完成的?为了学习如何做到这一点,我应该参考什么?
谢谢!
我可能错了,但我相信这完全取决于您的 运行(您的 window 经理是什么)。例如,如果你运行有openbox的东西(例如lubuntu),那么你可以参考以下内容:
http://openbox.org/wiki/Help:Bindings
Gnome 也有类似的概念。如果你想改变 Gnome,你可能想深入了解 gnome-tweak-tool 是如何改变事物的(特别是看看键绑定——tweak 做的更多!)。
在这两种情况下,我建议使用 Python(gnome-tweak-tool 将是如何执行此操作的一个很好的参考点)因为编写 GUI 非常方便并且允许您更改必要的文件很容易:)
如果您正在使用 Ubuntu,这个 post 可能对您有用:
https://askubuntu.com/questions/115333/how-do-i-disable-the-sleep-button-on-my-keyboard
他们的问题是针对一个特定的键,但前两个答案是相关的。 dconf-tools 的答案可能会帮助您更好地了解事物所在的位置。
所以最后,您最终需要以不同方式配置一些文件,但这些文件的位置以及如何更改它们取决于您的 window 经理。
上面的内容对于禁用 CAPS_LOCK 或交换 L_SHIFT 和 L_CTRL 之类的东西很有用。如果您询问有关一般更改任何键盘输入的问题,那么幕后还有很多事情要做。您可能想阅读这篇文章以更好地解释正在发生的事情:
http://www.linuxjournal.com/article/1080
所以如果你想重新映射,比如切换 'a' 和 'f' 键,你需要捕获 'a' 的键事件,然后发送 'f' 按键事件。有很多方法可以查看正在按下的键,这可能是一个很好的起点:
https://superuser.com/questions/248517/show-keys-pressed-in-linux
在这个级别改变东西要困难/危险得多,所以一定要小心!
希望对您有所帮助!如果这不是您想要做的,请在您的问题中包含更多关于您计划的实际目标的信息。
最近我想做一个小工具,可以让我任意重新映射键盘上的键以对应不同的字符输入。
从系统编程的角度来看,这通常是如何完成的?为了学习如何做到这一点,我应该参考什么?
谢谢!
我可能错了,但我相信这完全取决于您的 运行(您的 window 经理是什么)。例如,如果你运行有openbox的东西(例如lubuntu),那么你可以参考以下内容:
http://openbox.org/wiki/Help:Bindings
Gnome 也有类似的概念。如果你想改变 Gnome,你可能想深入了解 gnome-tweak-tool 是如何改变事物的(特别是看看键绑定——tweak 做的更多!)。
在这两种情况下,我建议使用 Python(gnome-tweak-tool 将是如何执行此操作的一个很好的参考点)因为编写 GUI 非常方便并且允许您更改必要的文件很容易:)
如果您正在使用 Ubuntu,这个 post 可能对您有用:
https://askubuntu.com/questions/115333/how-do-i-disable-the-sleep-button-on-my-keyboard
他们的问题是针对一个特定的键,但前两个答案是相关的。 dconf-tools 的答案可能会帮助您更好地了解事物所在的位置。
所以最后,您最终需要以不同方式配置一些文件,但这些文件的位置以及如何更改它们取决于您的 window 经理。
上面的内容对于禁用 CAPS_LOCK 或交换 L_SHIFT 和 L_CTRL 之类的东西很有用。如果您询问有关一般更改任何键盘输入的问题,那么幕后还有很多事情要做。您可能想阅读这篇文章以更好地解释正在发生的事情:
http://www.linuxjournal.com/article/1080
所以如果你想重新映射,比如切换 'a' 和 'f' 键,你需要捕获 'a' 的键事件,然后发送 'f' 按键事件。有很多方法可以查看正在按下的键,这可能是一个很好的起点:
https://superuser.com/questions/248517/show-keys-pressed-in-linux
在这个级别改变东西要困难/危险得多,所以一定要小心!
希望对您有所帮助!如果这不是您想要做的,请在您的问题中包含更多关于您计划的实际目标的信息。