我有一个 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 文件。