我是一名德沃夏克打字员。在我的机器上,dvorak 是默认的;在其他机器上,我经常使用setxkbmap
(当使用 X 时)或loadkeys
(否则)。但是“共享”系统又如何呢?
在处理系统时,例如为客户做好准备(Linux,主要基于 RH),我们有时会共享管理员帐户。如果我在尽完自己的职责后忘记切换回来……一切都会崩溃。这是可以理解的,因为没有人可以再输入任何内容了!
at
在我的工作开始时,我正在考虑开始一份工作;但相关系统没有运行atd
(我无法改变这一点)。 :-(
理想情况下,我想打开一个终端,切换键盘布局,并在关闭终端时让系统“忘记”更改。setxkbmap
另一方面,两者都loadkeys
在“更高”的层面上改变了布局。
有人有想法吗?
(我必须输入额外的命令和东西,这没关系,只是我不能假设其他人愿意这样做。)
答案1
最简单的方法是完成后注销。您的个人更改仅持续到您注销为止。话虽这么说,干预某人的帐户是一个常见的用例。
将其输入/粘贴到您的终端中(运行 bash 或 zsh):
xkb=$(xkbcomp :0 -); trap 'xkbcomp - :0 <<<"$xkb"' 0 1 2 15; setxkbmap dvorak
如果您正常退出 shell(exit
, Ctrl+ D)或正常关闭终端(将发送 SIGHUP),即以正常方式退出 shell 会话,陷阱将恢复原始键盘映射。
不要同时在多个终端中执行此操作:第一个退出的终端将恢复原始配置,最后一个退出的终端将恢复运行此命令时的配置。
如果您知道要恢复什么键映射并且只想处理正常的终端关闭,您可以将其简化为例如
trap 'setxkbmap us' 0 1; setxkbmap dvorak
请注意,这不会恢复人们可能通过典型的键盘设置 GUI 配置器进行的自定义! (这本质上是标准 XKB 映射中存在的选项。)如果要恢复用户的自定义设置,则需要使用xkbcomp :0 -
上述方法保存原始键盘映射。
或者,使用提供每个窗口切换布局的界面,并坚持使用一个终端窗口(记住不要启动任何 GUI 应用程序)。一些桌面环境提供此功能(例如XFCE),就像知识库。 Kbdd 在默认安装中不太可能可用,更不用说配置了,但也许您的默认桌面环境具有该功能。
一些注释不适用于您的用例,但适用于登录用户帐户时干预用户计算机的用例:
- 这可能会在最初由 设定的布局中引入细微的差异
xmodmap
,但是依赖这种细微差别的人会知道如何从基础知识有效的布局中恢复他们手工制作的键盘映射。 - 我不确定当前的活动级别是否在多级别(即多语言)配置中正确恢复,但同样,经常在布局之间切换的人们只会使用他们通常的方法来切换布局。
- 这可能会严重干扰通过更改 XKB 布局(而不是更改级别)的后台应用程序提供的布局切换。在这种情况下,您应该要求他们通过更改布局的方法切换到 Dvorak。
答案2
设置.profile
或类似
(1) 测试 X 是否正在运行 ( $DISPLAY
)。
(2) 将当前键盘映射保存到某个文件(setxkbmap -print
对于 XKB,或者modmap -pke
对于 X,dumpkeys
对于控制台)
(3) 设置键盘映射。
(4) shell退出时恢复旧的键盘映射,参见eg这里。
这不适用于多个终端,您必须使用一些“锁定”文件来确定第一个终端何时启动 shell,以及最后一个终端何时退出。
答案3
我想知道是否有面向硬件的解决方案。setxkbmap
采取-device
仅影响给定键盘(有多个键盘)的选项,而不影响核心 X11 设备。
因此,也许如果您随身携带一个真正的德沃夏克键盘,并将其插入,同时保留原来的键盘,那么您可以setxkbmap
为它运行一个当您拔掉键盘时就变得无关紧要的程序。用于xinput -list
获取每个设备的 id。 (它不一定是真实的dvorak 键盘,只是另一个键盘。)一个优点是两个人可以各自在自己的键盘上打字,并且不存在映射冲突。
您可以尝试使用单个键盘:如果您明确使用该键盘的 ID,而不是默认核心,那么当您拔下它并重新插入时,它会丢失您的配置更改吗?