我的键盘上的某些键已经坏了,所以我尝试对其他仍能正常工作的键进行编程,使其在按两次时按下损坏的键。这可能吗?有没有什么程序可以帮助我做到这一点?
我想重新映射该键,J以便当我按两次时显示“m”。
注意:我的笔记本电脑是 MacBook Pro 13" Unibody Mid 2012
答案1
为字符、字符串或整行设置别名
除非您正在使用 wayland(Ubuntu 17.10,在 Ubuntu Budgie 18.04 上测试过,但 Ubuntu Gnome 18.04 也应该没问题),下面的代码片段将对您有所帮助。
实践中如何运作
该脚本提供了一个为字符、字符串甚至整行设置别名的单一解决方案,只需在行中设置“别名”即可:
replacements = [
["jj", "m"],
["aa", "q"],
["zz", "e"],
["mb", "monkey eats banana"],
]
在后一种情况下,输入“mb”将粘贴“monkey eats banana”:
配置
您需要满足一些依赖关系:
pyautogui:
pip3 install pyautogui
pyperclip:
sudo apt install python3-pyperclip xsel xclip
python3-xlib
sudo apt install python3-xlib
注销并重新登录。
将以下脚本复制到一个空文件中,并将其另存为
replace_keys.py
#!/usr/bin/env python3 import gi gi.require_version("Gtk", "3.0") gi.require_version("Wnck", "3.0") from gi.repository import Gtk, Gdk, Wnck import subprocess import pyperclip import pyautogui import time """ depends on - pyautogui: pip3 install pyautogui - pyperclip: sudo apt install python3-pyperclip xsel xclip """ act_on_firstmatch = False replacements = [ ["jj", "m"], ["aa", "q"], ["zz", "e"], ["mb", "monkey eats banana"], ] class KeyWin(Gtk.Window): def __init__(self): self.screendata = Wnck.Screen.get_default() self.screendata.force_update() self.curr_subject = self.screendata.get_active_window().get_xid() self.currmatch = "" Gtk.Window.__init__(self) maingrid = Gtk.Grid() self.add(maingrid) self.set_decorated(False) self.set_position(Gtk.WindowPosition.CENTER) self.connect("key-release-event", self.check_key) self.keyentry = Gtk.Entry() self.keyentry.connect("changed", self.update_current) self.label = Gtk.Label("") self.label.set_width_chars(10) maingrid.attach(self.keyentry, 0, 0, 1, 1) maingrid.attach(self.label, 1, 0, 1, 1) self.show_all() self.connect("destroy", Gtk.main_quit) Gtk.main() def update_current(self, widget): curr = self.keyentry.get_text() self.currmatch = "" for s in replacements: if curr == s[0]: self.currmatch = s[1] if act_on_firstmatch: self.replace() self.label.set_width_chars(len(self.currmatch) + 4) self.label.set_text(self.currmatch) def replace(self, *args): pyperclip.copy(self.currmatch) subprocess.call(["wmctrl", "-ia", str(self.curr_subject)]) Gtk.main_quit() def check_key(self, button, val): typed = Gdk.keyval_name(val.keyval) if typed == "Control_L": self.replace() KeyWin() time.sleep(0.05) pyautogui.hotkey('ctrl', 'v')
在以下部分设置您的别名(保留缩进!):
replacements = [ ["jj", "m"], ["aa", "q"], ["zz", "e"], ["mb", "monkey eats banana"], ]
如果你愿意,可以改变
act_on_firstmatch = False
进入
act_on_firstmatch = True
如果你想立即插入而不敲击Ctrl
设置快捷键和 Ctrl 作为修饰符。我在测试中使用Ctrl+通过以下命令运行脚本:J
python3 /path/to/replace_keys.py
您已经完成了!
答案2
我有两台机器都存在按键磨损/损坏的问题。我找到了两个解决方案:
花十块钱买一个 WiFi USB 键盘(罗技有一款不错的)。通常 BIOS 会在 OS 之前发现并抓取它。
加载远程控制软件(RealVNC 对于小型设置是免费的,并且可以跨不同的操作系统)
两种工作方式均取决于所需的访问。
答案3
尽管@jacobvlijm 的答案更具体,但另一种选择是使用类似的程序自动键。它通过从触发短语和热键按下生成键盘和鼠标输入来完成许多操作来实现桌面自动化。
具体来说,您可以为每个坏键定义一个短语,并让其由触发短语触发,触发短语是实际输入中不太可能发生的任意有效按键组合。这些短语可以设置为在单词内立即触发。
还有一个选项,如果您需要触发字符,如果您立即按下退格键,则会将您刚刚输入的触发文本放回原处。
所有这些都可以使用 AutoKey GUI 界面进行配置,无需实际编码。
对于更复杂的要求,AutoKey 可以运行由短语或热键触发的完整 Python 脚本,而这仅受限于用户的想象力和 Python 知识。