在Ubuntu18.04中,我使用以下自动启动脚本:
[Desktop Entry]
Type=Application
Exec=/home/user/.xinitrc
Version=1.0
X-GNOME-Autostart-enabled=true
Name=xmodmap
Comment=xmodmap script这就是xmodmap /path/.Xmodmap &。
当系统启动时,它就工作了。当系统从睡眠中醒来时,重新映射就不再起作用了。我怎么才能解决这个问题?
编辑:(回复评论)这也没有解决问题:
$ 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) &
fisleep 30也不起作用。当然,脚本是手动运行的。
发布于 2020-11-24 17:41:01
当您拔出和回复键盘时,您修改的设置也会“丢失”,这就是这里所发生的情况:当进入挂起时禁用键盘时,挂起会生成热插拔事件,退出时会重新启用。
从X服务器的角度来看,从挂起返回后连接的键盘是一个新的键盘,因此它是用标准绑定来处理的,就像第二个键盘一样。
这是已知的USB键盘驱动程序的缺点,并且在内核中很难修复(因为USB是在简历中重新枚举的,所以即使给设备分配了一个新的编号,我们也需要一种保持设备身份的方法),并且很难在X服务器中修复(因为它需要保存设备的历史记录)。
很可能您能做的最好的事情是运行命令,作为会话启动的一部分,并作为键盘热插拔处理的一部分,但是我想不出一个完全干净的解决方案。
发布于 2020-11-25 12:25:12
这是一个可行的解决方案,得到了各种来源的帮助,但大多是我写的。caps是xmodmap脚本(CapsLock => F13)。
#!/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会在恢复几秒钟后由系统自动重置,但有时会失败,因此延迟是必要的。
发布于 2022-02-28 10:24:13
这是我对这个问题的一个特殊情况的低科技的解决方案:
我的键盘有一个打印键,菜单键应该在那里,所以我的xmodmap只映射了一个键。
我设置了一个键绑定(在我的例子中的gnome shell中),以便打印键运行。
/bin/bash -c "/usr/bin/xmodmap $HOME/.Xmodmap"因此,在挂起之后,当我第一次按下打印键时,它将触发xmodmap,从那时起,它作为菜单键工作。
(在那之后,我的键盘不再有打印键。)
这种办法应在下列情况下起作用:
https://unix.stackexchange.com/questions/505350
复制相似问题