如何在终端(无桌面环境)中定义撰写键?


18

我想compose在我的系统上定义一个键(Debian Sid“ Wheezy”)。我没有Xorg(并且不需要任何桌面环境)。仅在终端中。

我想在我的Alt-Gr钥匙(右Alt)上进行设置。我已经尝试了一段时间,但我不知道如何设置它。

我一直在调查,并找到了一些指示:

  • $ showkey给我Alt-Gr钥匙的密码(#100)

  • $ dumpkeys$ dumpkeys --compose-only输出“键盘的驱动程序的当前内容”,由指定的格式keymaps,根据man页面

  • $ loadkeys 加载键盘翻译表

我敢肯定这并不难,但我想念如何处理...


嗯,我不是100%跟随,当您击中Alt-Gr时,您想做什么?
伊曼纽尔·伯格

我希望它是Compose Key。实际上,我只是想在某个地方定义一个Compose键,并且由于我习惯将其放在我的Alt-Gr上,因此我想在那儿定义它。使用GUI设置非常容易,但是我应该可以在纯控制台模式下对其进行定义,因为我没有安装X系统(这不是一个选择)。我只是不知道如何。
cedbeu 2012年

Answers:


11

在较新的Debian和Ubuntu系统上,您的键盘设置被放入/etc/default/keyboardX和控制台之间并在它们之间共享。赶紧跑

sudo dpkg-reconfigure keyboard-configuration

Compose key: Right Alt (AltGr)在适当的屏幕上选择。

你也可以把XKBOPTIONS=compose:ralt/etc/default/keyboard和运行

sudo dpkg-reconfigure console-setup

较早的系统默认情况下在控制台上具有Compose键。在us布局中,同时按下两个 Alt键的行为类似于Compose1个

例如:Alt+ AltGr"A=>Ä

如果您AltGr只想成为Compose,则需要进行更改

alt keycode 100 = Compose

在您的活动键盘中映射到

keycode 100 = Compose

最简单的方法是在中进行上述更改/lib/kbd/keymaps/i386/include/linux-with-alt-and-altgr.inc

更好的方法是/lib/kbd/keymaps/i386/include/altgr-is-compose.inc使用上一行创建一个名为的新文件,创建一个包含该文件的新键盘映射,并将其设置为默认键盘映射。

  1. PrtScnCompose默认情况下也充当。

我没有这个工作。该dpkg-reconfigure向导确实询问了一个组合键,但是它说它在“ Unicode模式”(?)下不起作用。另外,如果不在该模式下,则表示Control +句点用作撰写键。但是我也没有使它起作用。
伊曼纽尔·伯格

我认为该警告消息是指unicode_start。对我来说,它仍然有效,但前提是我setupcon按照上述规定运行dpkg-reconfigure
Mikel

当我setupcon在X终端(urxvt)中运行时,它显示“我们不在控制台上,未配置控制台。” 另外,showkey抱怨“无法向控制台获取文件描述符”。在中tty,这两个方法都起作用,但是showkey(第一件事)说“ kb模式是UNICODE”,所以也许这确实是它不起作用的原因。但是,Control +句点在中有效tty。好的,这很有意义。
伊曼纽尔·伯格

您的问题是您没有X?您需要setupcon在Linux虚拟控制台上运行,例如Ctrl + Alt + F1。
Mikel

1
看起来console-setup默认情况下不支持很多组合序列。您可以运行dumpkeys --compose-only以查看哪些。您应该能够修改console-setupinit脚本以在其运行时添加其他撰写规则loadkeys
Mikel

2

控制台上的“ compose”允许键入两个字符,但输出第三个字符。

问题在于compose定义将bytes用作两个输入(即,您不能根据类型化的键来定义compose,而只能根据类型化的符号来定义)以及用于输出。

要使其在多字节(至少1到4字节)的UTF-8中工作,将需要对控制台输入的处理方式进行重大更改,并以更复杂的方式替换当前使用的简单char数组。似乎没有计划这样做(内核开发者之间的共识是控制台应该仍然是一个控制台,这很简单,仅用于最后一次排序;如果您实际上需要unicode,那么您可能还需要bidi,shapeing等;然后最好运行图形终端(在X11上使用全屏xterm;但是还有其他可能)。

因此,在控制台上使用多字节字符确实不起作用,也将不起作用。但是,如果您将撰写定义限制为纯ASCII,它仍然可以使用。

而且我还发现,如果输出在iso-8859-1中(对应于0x00ff以下的unicode值),它也可以工作。为此,您可以在一些启动脚本中添加一行:

    loadkeys / somepath / somefile

并在文件中放入所需的撰写定义(请小心以ISO-8859-1编码保存文件;并使用大于0x7f的字符作为输出),这种文件的语法非常简单,如下所示:

    将“ somechar”,“ somotherchar”组成为“ desiredoutput”

例如:

    将“ a”,“ a”组成为“å”
    将“ a”,“ e”组成为“æ”

撇号必须转义。

该文件中还定义了变音符号的失效效果;对于dead_acute + a,您可以定义以下行:

    将'\''a'改为'á'

dead_grave使用反引号(`),dead_diaeresis使用双引号(“),dead_circumflex使用反斜线(^),dead_tilde使用波浪号(〜)。


谢谢,让它正常工作。只是,我不得不compose 'a' 'a' to 'å'改成compose 'o' 'a' to U+00E5,否则loadkeys抱怨语法错误。
伊曼纽尔·伯格

使用“å”时,您是否在iso-8859-1(不是utf-8)中写入了文件?
Pablo Saratxaga

我不知道。我该如何检查?
伊曼纽尔·伯格

测试文件是否在utf-8中:iconv -f utf-8 -t utf-8 filename 如果没有错误,则在utf-8中
Pablo Saratxaga

这似乎很麻烦,但没有,echo $?至少没有错误,也没有输出到stderr。另外,file告诉我它是UTF-8,所以很有意义。
伊曼纽尔·伯格
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.