首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >插入或拔出键盘时改变键盘布局

插入或拔出键盘时改变键盘布局
EN

Unix & Linux用户
提问于 2017-03-28 15:14:38
回答 1查看 1K关注 0票数 2

我使用一个外部键盘与我的笔记本电脑和脚本,以改变键盘布局取决于键盘是否插入。这很好,但我发现手动运行脚本是不必要的:只要插入或退出外部键盘,脚本就应该自行运行。我尝试过用udev规则来设置它,但是由于某种原因它不起作用。我的udev规则是:

代码语言:javascript
复制
KERNEL=="3-1.1", SUBSYSTEM=="usb", RUN+="/root/bin/udev.sh"

我已经确认,每当我插入或拔出键盘时,这个脚本就会运行一次。脚本的内容如下:

代码语言:javascript
复制
#!/usr/bin/bash
su - toothrot -c "/usr/local/bin/loadkb.sh" &

/usr/local/bin/loadkb.sh的内容如下:

代码语言:javascript
复制
#!/bin/bash

export DISPLAY=:0 
export XAUTHORITY=/home/toothrot/.Xauthority
export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus

killall xcape

if lsusb | grep HHKB
then {
    setxkbmap us,gr \
        -variant carpalx-plus-intl,daedalus \
        -option grp:win_space_toggle \
        -option lv3:rwin_switch \
        -option altwin:meta_alt \
        -option shift:breaks_caps \
        -option lv5:lsgt_switch_lock
    xmodmap ~/.xmodmap/hh 
    xcape -e 'Shift_L=F13;Shift_R=F14;Super_L=Prior;Hyper_L=Prior'
}
else {
    setxkbmap us,gr \
        -variant carpalx-plus-intl,daedalus \
        -option grp:win_space_toggle \
        -option lv3:ralt_switch \
        -option altwin:meta_alt \
        -option shift:breaks_caps -option lv5:lsgt_switch_lock
    xmodmap ~/.xmodmap/apple
    xcape -e 'Control_L=Escape;Shift_L=F14;Shift_R=F13;Alt_L=Escape;Alt_R=Escape'
}
fi

我已经确认,将/root/bin/udev.sh作为根用户运行对于我的toothrot X会话是有效的。只有在由udev规则运行时,脚本才不能工作。我遗漏了什么?

或者,是否有一种方法可以在不使用udev规则的情况下实现我想要的结果,也许是在X内部?

EN

回答 1

Unix & Linux用户

发布于 2019-12-27 14:04:50

这篇博客文章的启发下,我让xmodmap使用/etc/udev/rules.d/70-usb-keyboards.rules中的以下规则:

代码语言:javascript
复制
ACTION=="add", ATTRS{idVendor}=="0000", ATTRS{idProduct}=="0000", RUN+="/bin/sh -c 'DISPLAY=:0.0 XAUTHORITY=/home/toothrot/.Xauthority sh -c \"setxkbmap us,gr;xmodmap /home/toothrot/.xmodmap/hh\" &'"

lsusb中的设备值替换供应商和产品id,并根据您的喜好调整脚本,然后不要忘记用以下方式重新加载udev规则:

代码语言:javascript
复制
udevadm control --reload

我总是把检测留给udev,所以这是键盘添加时的规则。若要对删除采取行动,请添加另一条规则行:

代码语言:javascript
复制
ACTION=="remove"
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/354363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档