挂起后无法让 xmodmap 工作

gex*_*ide 8 startup suspend xmodmap

我正在使用 Ubuntu 14.04。

我有一个自定义的 Xmodmap 键盘布局。但是,当我在暂停后恢复时,布局消失了。

我已经尝试了这个问题的答案中提到的所有内容: 如何在登录时设置 Xmodmap?

使用 .xinitrc 或在启动应用程序中添加命令都不起作用。好吧,它们在通常重新启动后确实可以工作,但在挂起之后就不行了。

有没有一个文件,无论是重启还是从挂起恢复,登录后总是执行?

Vic*_*ist 4

@i08in https://askubuntu.com/a/92235/72576似乎可以完成这项工作。

这就是我在 Debian jessie、KDE ​​上的最终结果。

/etc/pm/sleep.d/20_xmodmap.sh

case "${1}" in
    resume|thaw)
        su $USER -c "sleep 3; /usr/bin/xmodmap /home/$USER/.Xmodmap" &
;;
esac
Run Code Online (Sandbox Code Playgroud)

注意:一开始它可能看起来不起作用,但请等待一分钟左右。X 似乎有一些东西导致了这种延迟,尽管我还没有足够关心去检查它......有关更多信息,请参阅https://superuser.com/q/626769/185360 。


小智 0

所有这些都是废话代码。你们真的对 XAUTHORITY 和 DISPLAY 没有任何问题吗?我不相信。所以这是真正有效的解决方案(记住将 $USER 替换为您的用户名):

步骤 1. 使用映射生成“.Xmodmap”文件,在我的例子中是:

keycode 96 = XF86AudioLowerVolume
keycode 95 = XF86AudioMute
keycode 76 = XF86AudioNext
keycode 75 = XF86AudioPlay
keycode 74 = XF86AudioPrev
Run Code Online (Sandbox Code Playgroud)

并将其放在 /home/$USER/.Xmodmap 路径下

步骤 2. 创建启动应用程序首选项(从超级按钮搜索菜单转到启动应用程序首选项)并添加以下内容:

Name: xmodmap
Command: /bin/bash -c "sleep 7 && xmodmap ~/.Xmodmap"
Comment: 
Run Code Online (Sandbox Code Playgroud)

并保存。并关闭启动应用程序首选项

步骤 3. 现在转到 /usr/lib/systemd/system-sleep 文件夹,如下所示:

cd /usr/lib/systemd/system-sleep 
Run Code Online (Sandbox Code Playgroud)

步骤4.创建一个名为“xkeyboard.sh”的文件,你可以这样做(需要sudo权限):

sudo touch xkeyboard.sh
Run Code Online (Sandbox Code Playgroud)

步骤5.现在获取您的$XAUTHORITY变量值,您可以这样做:

echo $XAUTHORITY
Run Code Online (Sandbox Code Playgroud)

就我而言,它返回了以下内容:

/run/user/1000/gdm/Xauthority
Run Code Online (Sandbox Code Playgroud)

把它写在某处

步骤6.打开新创建的文件进行编辑,你可以这样做:

sudo nano xkeyboard.sh
Run Code Online (Sandbox Code Playgroud)

第7步:粘贴此代码。确保将 $USER 替换为您的用户名,将 $XAUTH 替换为您之前记下的变量:

   #!/bin/bash

    echo "Running xkeyboard.sh with argument: $1" >> /tmp/xkeyboard.log
    
    if [ "${1}" == "pre" ]; then
        echo "pre" >> /tmp/xkeyboard.log
        # Nothing to do for pre-sleep
    elif [ "${1}" == "post" ]; then
        echo "post" >> /tmp/xkeyboard.log
        export DISPLAY=:0  # Set the DISPLAY variable
        export XAUTHORITY=$XAUTH
        /bin/bash -c "sleep 7 && xmodmap home/$USER/.Xmodmap" >> /tmp/xkeyboard.log 2>&1
    fi
Run Code Online (Sandbox Code Playgroud)

在此代码中,我已将日志记录添加到 /tmp/xkeyboard.log 文件,因此如果键盘映射不起作用,您可以去那里检查发生了什么问题。