首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >睡眠后丢失的xmodmap

睡眠后丢失的xmodmap
EN

Unix & Linux用户
提问于 2019-03-09 18:10:40
回答 3查看 2K关注 0票数 6

在Ubuntu18.04中,我使用以下自动启动脚本:

代码语言:javascript
复制
[Desktop Entry]
Type=Application
Exec=/home/user/.xinitrc
Version=1.0
X-GNOME-Autostart-enabled=true
Name=xmodmap
Comment=xmodmap script

这就是xmodmap /path/.Xmodmap &

当系统启动时,它就工作了。当系统从睡眠中醒来时,重新映射就不再起作用了。我怎么才能解决这个问题?

编辑:(回复评论)这也没有解决问题:

代码语言:javascript
复制
$ cat /etc/systemd/system/xmodmapbindings.service
[Unit]
Description=xmodmap bindings
Before=sleep.target
StopWhenUnneeded=yes

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStop=-/home/norake/.xinitrc

[Install]
WantedBy=sleep.target

$ cat ~/.xinitrc 
#!/bin/bash

if [ "$USER" != norake ]; then
    su norake -c 'sleep 5; /usr/bin/xmodmap /home/norake/.Xmodmap' &
    # without su, without sleep, without fork (&): doesn't work either
else
    (sleep 5; /usr/bin/xmodmap /home/norake/.Xmodmap) &
fi

sleep 30也不起作用。当然,脚本是手动运行的。

EN

回答 3

Unix & Linux用户

发布于 2020-11-24 17:41:01

当您拔出和回复键盘时,您修改的设置也会“丢失”,这就是这里所发生的情况:当进入挂起时禁用键盘时,挂起会生成热插拔事件,退出时会重新启用。

从X服务器的角度来看,从挂起返回后连接的键盘是一个新的键盘,因此它是用标准绑定来处理的,就像第二个键盘一样。

这是已知的USB键盘驱动程序的缺点,并且在内核中很难修复(因为USB是在简历中重新枚举的,所以即使给设备分配了一个新的编号,我们也需要一种保持设备身份的方法),并且很难在X服务器中修复(因为它需要保存设备的历史记录)。

很可能您能做的最好的事情是运行命令,作为会话启动的一部分,并作为键盘热插拔处理的一部分,但是我想不出一个完全干净的解决方案。

票数 2
EN

Unix & Linux用户

发布于 2020-11-25 12:25:12

这是一个可行的解决方案,得到了各种来源的帮助,但大多是我写的。caps是xmodmap脚本(CapsLock => F13)。

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

USERN=cemkalyoncu
SCRIPT=/home/cemkalyoncu/Installed/caps

case $1 in
    post)
        DISPLAY=:0
        export DISPLAY
        su $USERN -c "$SCRIPT"
        #screen
        #su $USERN -c "sleep 30; kwin --replace &" &
    esac

我也离开了kwin --replace,因为kwin有时会引起故障,需要重置,但是它不是一个deamon,应该使用屏幕来分离。只有当您正在使用KDE时才会这样做。如果没有安装,请安装屏幕。在这里导出显示器是使其工作的关键。与用户一起运行也是必要的。即使你是恢复的人,它仍然不是你的帐户。睡眠对于xmodmap来说并不是必需的。但是kwin会在恢复几秒钟后由系统自动重置,但有时会失败,因此延迟是必要的。

票数 0
EN

Unix & Linux用户

发布于 2022-02-28 10:24:13

这是我对这个问题的一个特殊情况的低科技的解决方案:

我的键盘有一个打印键,菜单键应该在那里,所以我的xmodmap只映射了一个键。

我设置了一个键绑定(在我的例子中的gnome shell中),以便打印键运行。

代码语言:javascript
复制
/bin/bash -c "/usr/bin/xmodmap $HOME/.Xmodmap"

因此,在挂起之后,当我第一次按下打印键时,它将触发xmodmap,从那时起,它作为菜单键工作。

(在那之后,我的键盘不再有打印键。)

这种办法应在下列情况下起作用:

  1. 你不介意先按下“盲”键。
  2. 您至少有一个按钮,您知道,您将按之前或尽快重新映射变得相关。
  3. 此按钮的初始键符号不再出现在新的映射中。
票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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