是否可以使用没有sudo访问权限的自定义键盘布局? 如果是这样,怎么样?

我一直在使用自定义键盘,使用Help.Ubuntu教程自定义键盘布局定义中详细说明并在此问题中进一步说明。 我已经非常喜欢这个键盘,但我最近开始使用的机器我没有真正的sudo访问权限(或者说,我确实有一些访问权限,但它真的很尴尬)。

那么:是否可以进行仅适用于我的用户的等效安装,而不依赖于管理权限? 更具体地说,如果要安装特定的软件包我就可以了,但是如果它需要替换我的主目录之外的文件,则会变得更加困难。

一个快速正确的答案,因为我还没有评论:

正如我在另一个问题中提到的那样,您可以在主目录(或其他具有写权限的地方)中创建布局文件作为XKB数据库目录树的本地版本:

$HOME/.config/xkb/ ... ├── rules │ ├── evdev-local ... ├── symbols │ ├── my-fun-capslock-options │ ├── my-US-Dvorak-layout │ └── my-ZWERTY-layout ... 

…然后在setxkbmap使用-I选项:

 setxkbmap -I $HOME/.config/xkb \ -rules evdev-local \ -layout my-ZWERTY-layout \ -option myZWERTY:option1,compose:menu,fun:caps_is_insert 

用于设置键盘的基础命令是setxkbmap —现在,看看它的手册页,似乎它将从/usr/share/X11/xkb/读取键盘规范,因此您需要在那里编写修改后的布局 – – 系统目录,需要root访问权限。

我试过这个:

 strace setxkbmap nonexistant |& grep open 

看看命令在做什么,看看:(部分输出)

 open("/run/user/1153/gdm/Xauthority", O_RDONLY) = 4 open("./rules/evdev-C.lst", O_RDONLY) = -1 ENOENT (No such file or directory) open("./rules/evdev.lst", O_RDONLY) = -1 ENOENT (No such file or directory) open("/usr/share/X11/xkb/rules/evdev-C.lst", O_RDONLY) = -1 ENOENT (No such file or directory) open("/usr/share/X11/xkb/rules/evdev.lst", O_RDONLY) = 4 

所以似乎 setxkbmap也在查看当前目录中的文件规范。 如果你从/usr/share/X11/xkb/ in复制所有相关的目录结构,比如说, $HOME/myxkb ,然后尝试发出命令,那么也许(我没时间测试)

 setxbmap -model pc105 -layout myshiny -variant myvariant 

或者它可能起作用。

PD: 拱形帮助页面一如既往地有用 ; 一个很好的命令,你可以用来看看你正在使用的键盘是由这一个:

 [romano:~] % setxkbmap -print -verbose 10 Setting verbose level to 10 locale is C Trying to load rules file ./rules/evdev... Trying to load rules file /usr/share/X11/xkb/rules/evdev... Success. Applied rules from evdev: rules: evdev model: pc105 layout: es,us variant: standard_tlde, options: caps:none,compose:caps,terminate:ctrl_alt_bksp Trying to build keymap using the following components: keycodes: evdev+aliases(qwerty) types: complete compat: complete symbols: pc+es(standard_tlde)+us:2+inet(evdev)+capslock(none)+compose(caps)+terminate(ctrl_alt_bksp) geometry: pc(pc105) xkb_keymap { xkb_keycodes { include "evdev+aliases(qwerty)" }; xkb_types { include "complete" }; xkb_compat { include "complete" }; xkb_symbols { include "pc+es(standard_tlde)+us:2+inet(evdev)+capslock(none)+compose(caps)+terminate(ctrl_alt_bksp)" }; xkb_geometry { include "pc(pc105)" }; }; 

如果您只想扩展现有的键盘布局,我可以推荐本指南 。

quixotic 的 答案是完整的,function性的,可能是你通常应该做的。 但是,如果您不想复制和修改rules文件,无论出于何种原因,这是一个替代解决方案。

在这种情况下,我们将直接使用xkbcomp加载“xkb keymap文件”。

首先,创建所需的任何自定义布局或选项,例如在文件~/.config/xkb/symbols/option_file包含内容:

 partial hidden modifier_keys xkb_symbols "new_option_1" { [...] }; 

接下来,使用setxkbmap -print > ~/.config/xkb/keymap/my_layout转储当前布局。 (请注意,这不一定必须与上面的symbols文件(或您添加的任何其他文件)位于同一目录层次结构中,因为我们将明确指定它的路径。)这将是一种forms的:

 xkb_keymap { xkb_keycodes { include "evdev+aliases(qwerty)" }; xkb_types { include "complete" }; xkb_compat { include "complete" }; xkb_symbols { include "pc+us+inet(evdev)" }; xkb_geometry { include "pc(pc105)" }; }; 

要启用新选项,请通过将+option_file(new_option_1)添加到xkb_symbols行来编辑转储布局,因此我们的示例将变为:

 xkb_keymap { xkb_keycodes { include "evdev+aliases(qwerty)" }; xkb_types { include "complete" }; xkb_compat { include "complete" }; xkb_symbols { include "pc+us+inet(evdev)+option_file(new_option_1)" }; xkb_geometry { include "pc(pc105)" }; }; 

最后,使用以下命令加载新的键映射: xkbcomp -I$HOME/.config/xkb ~/.config/xkb/keymap/my_layout $DISPLAY

参考文献:

http://madduck.net/docs/extending-xkb/

https://www.vinc17.net/unix/xkb.en.html