暂停后无法使 xmodmap 工作

暂停后无法使 xmodmap 工作

我正在使用 Ubuntu 14.04。

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

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

无论是使用 .xinitrc 还是在启动应用程序中添加命令都不起作用。好吧,它们在正常重启后确实有效,但在挂起后则无效。

是否存在一个文件在登录后始终执行,无论是重新启动还是从暂停状态恢复?

答案1

@i08inhttps://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

注意:一开始它似乎不起作用,但请稍等片刻。X 似乎有一些东西导致了这种延迟,尽管我还没有仔细检查过它……请参阅https://superuser.com/q/626769/185360了解更多信息。

答案2

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

步骤 1. 使用映射生成“.Xmodmap”文件,在我的情况下它是:

keycode 96 = XF86AudioLowerVolume
keycode 95 = XF86AudioMute
keycode 76 = XF86AudioNext
keycode 75 = XF86AudioPlay
keycode 74 = XF86AudioPrev

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

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

Name: xmodmap
Command: /bin/bash -c "sleep 7 && xmodmap ~/.Xmodmap"
Comment: 

并保存。然后关闭启动应用程序偏好设置

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

cd /usr/lib/systemd/system-sleep 

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

sudo touch xkeyboard.sh

步骤 5.现在获取您的 $XAUTHORITY 变量值,您可以像这样执行操作:

echo $XAUTHORITY

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

/run/user/1000/gdm/Xauthority

把它写下来

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

sudo nano xkeyboard.sh

步骤 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

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

相关内容