如何设置 Ubuntu 在连接外部键盘时自动打开 NumLock 并在未连接时自动关闭?

Iva*_*van 12 gnome xorg automation numlock

在使用全尺寸外部键盘(有小键盘)时,启用 NumLock 很方便,而在使用笔记本电脑的内置键盘(除非按下 Fn 否则将数字而不是字母放在键盘的右侧)时非常不方便。

因此,每次连接外部键盘(或连接时启动)时,我都必须打开 NumLock,每次卸下外置键盘(或卸下时启动)时都必须关闭 NumLock。我经常这样做是因为我更喜欢使用全尺寸外置键盘,但没有足够的(只有 3 个)USB 端口将其与鼠标、3G 调制解调器和外置硬盘/闪存驱动器一起插入。

我可以自动化吗?似乎是一个非常正式、逻辑上简单的任务:如果连接了 USB 键盘(/dev 中的某些设备存在?) - NumLock 已打开,否则 - NumLock 已关闭。我的笔记本电脑的内置键盘是 PS/2 连接的,外部是 USB。

也许我应该自己编写代码,但在这种情况下应该把它放在哪里?

我使用 Ubuntu 10.10。

Ham*_*ner 14

首先,安装 numlockx(单击此处安装 numlockx)。基本上,这允许您编写脚本来设置 Num Lock 的状态 -有关详细信息,请参阅numlockx 手册页

接下来我们需要开始钻研udev规则的乐趣。首先我们需要找出键盘是如何识别的。你可以这样做

ls /dev/input/by-id/
Run Code Online (Sandbox Code Playgroud)

这应该为您提供一些人类可读的文件名(这些文件名是指向不是特别易读的真实名称的软链接)。我的键盘是

/dev/input/by-id/usb-KINESIS_FREESTYLE_KB700_KB700_Kinesis_Freestyle-event-kbd
Run Code Online (Sandbox Code Playgroud)

那么我们需要找出有关键盘的所有信息。我做了

udevadm info -a -p $(udevadm info -q path -n /dev/input/by-id/usb-KINESIS_FREESTYLE_KB700_KB700_Kinesis_Freestyle-event-kbd)
Run Code Online (Sandbox Code Playgroud)

但是当然要在那里插入你自己的路径。您将获得大量信息,但您想查看第一个为键盘命名并带有SUBSYSTEMS=="usb". (而不是 USB 控制器或其他任何东西)。就我而言,那是:

  looking at parent device '/devices/pci0000:00/0000:00:1a.0/usb3/3-2/3-2.3':
    KERNELS=="3-2.3"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{configuration}==""
    ATTRS{bNumInterfaces}==" 2"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bmAttributes}=="a0"
    ATTRS{bMaxPower}==" 50mA"
    ATTRS{urbnum}=="6284"
    ATTRS{idVendor}=="058f"
    ATTRS{idProduct}=="9410"
    ATTRS{bcdDevice}=="0122"
    ATTRS{bDeviceClass}=="00"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bMaxPacketSize0}=="8"
    ATTRS{speed}=="1.5"
    ATTRS{busnum}=="3"
    ATTRS{devnum}=="3"
    ATTRS{devpath}=="2.3"
    ATTRS{version}==" 1.10"
    ATTRS{maxchild}=="0"
    ATTRS{quirks}=="0x0"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{authorized}=="1"
    ATTRS{manufacturer}=="KINESIS FREESTYLE KB700"
    ATTRS{product}=="KB700 Kinesis Freestyle"
Run Code Online (Sandbox Code Playgroud)

所以现在我们有足够的信息来编写一些规则。使用您最喜欢的编辑器来创建/etc/udev/rules.d/10-local.rules和输入:

BUS=="usb",ATTRS{product}=="KB700 Kinesis Freestyle",ACTION=="add",RUN+="/usr/bin/numlockx on"
BUS=="usb",ATTRS{product}=="KB700 Kinesis Freestyle",ACTION=="remove",RUN+="/usr/bin/numlockx off"
Run Code Online (Sandbox Code Playgroud)

再次,在这里输入您的键盘名称,如果不同则输入 ATTRS。然后它应该工作:)

请注意,我一直无法对此进行测试,尽管我已经运行了所有命令,直到创建规则文件为止。如果您需要进行更多调查,来源是: