是否可以在没有 sudo 访问权限的情况下使用自定义键盘布局?如果可以,该怎么做?

是否可以在没有 sudo 访问权限的情况下使用自定义键盘布局?如果可以,该怎么做?

我已经使用自定义键盘一段时间了,使用Help.Ubuntu教程中详细介绍的说明自定义键盘布局定义并进一步解释这个问题。我已经非常喜欢这个键盘了,但最近我开始使用一台我没有 sudo 访问权限的机器(或者更确切地说,我确实有一定程度的访问权限,但这真的很尴尬)。

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

答案1

由于我还不能发表评论,所以快速给出正确的答案:

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

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

...然后使用该-I选项setxkbmap

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

答案2

设置键盘的底层命令是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/$HOME/myxkb然后尝试发出命令

setxbmap -model pc105 -layout myshiny -variant myvariant 

或者其他可能工作。

PD:arch 帮助页面一如既往地有用;您可以使用这个命令来查看您使用的键盘是由什么组成的:

[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)" };
};

答案3

我可以推荐这个指导如果您只是想扩展现有的键盘布局。

答案4

答案由 quixotic 编写,功能齐全,可能正是您通常应该做的。但是,如果您出于某种原因不想复制和修改文件rules,这里有一个替代解决方案。

在这种情况下,我们将直接使用 加载“xkb 键盘映射文件” xkbcomp

首先,创建您想要的任何自定义布局或选项,在~/.config/xkb/symbols/option_file内容文件中说道:

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

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

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

相关内容