如何在挂起后保留 xmodmap

如何在挂起后保留 xmodmap

我有一个 xmodmap 文件~/.Xmodmap,它工作得很好。我把它放在 ubuntu 19.10 的启动应用程序中,就像这样xmodmap /home/yasser/.Xmodmap,它在第一次启动时工作。然而,挂起后,该文件就不起作用了。我尝试/usr/lib/pm-utils/sleep.d/999zxmodmap使用以下内容创建一个脚本:

#!/bin/bash

    case $1 in
        pre)
            exit 0
        ;;
        post)
            export DISPLAY=:0
            sleep 10
            xmodmap /home/yasser/.Xmodmap
        ;;
    esac

我在其他地方看到了这个建议,但这不起作用。这是我的~/.Xmodmap文件,如果有帮助的话:

keycode 66 = Mode_switch
keysym j = j J Left
keysym l = l L Right
keysym i = i I Up
keysym k = k K Down
keysym h = h H Home
keysym semicolon = semicolon colon End

预先非常感谢您的帮助。

答案1

尝试在您的export DISPLAY=:0行之后添加此行:

export XAUTHORITY=/home/yasser/.Xauthority

当 X11 GUI 会话启动时,~/.Xmodmap会在用户登录时自动读取。

但从/usr/lib/pm-utils/sleep.d/999zxmodmap挂起恢复后执行时,是以 root 身份执行的。

与任何 X11 应用程序一样,该xmodmap命令需要两件事来访问 GUI 会话:DISPLAY环境变量和X11 会话 cookie(=某种钥匙)。默认情况下,会话 cookie 被存储~/.Xauthority并在每次 X11 登录时重新创建。当您的脚本以 root 身份运行该xmodmap命令时,它将在/root/.Xauthority... 中查找会话 cookie,如果当前登录的用户是 ,则这不是查找的正确位置yasser

幸运的是,您可以使用XAUTHORITY环境变量告诉 X11 应用程序在非标准位置查找会话 cookie...并且由于 root 可以访问所有内容,因此xmodmap以 root 身份运行的命令将能够读取yasser的 cookie 文件。

相关内容