尝试在恢复时对该文件进行 xmodmap 操作。已尝试如何在暂停恢复后执行命令?通过使用 xmodmap -e 添加多个键映射但没有成功(每次它只接受第一行)。我觉得它应该能够使用 .Xmodmap 来保持代码简单。Ubuntu 14.04。谢谢。
我的 .Xmodmap(具有可执行权限)位于 /home/dadtwo/
clear control
clear mod4
keycode 133 = Control_L NoSymbol Control_L
keycode 37 = Super_L NoSymbol Super_L
add control = Control_L
add mod4 = Super_L
我的 10_keyboard-swap(具有可执行权限)位于 /etc/pm/sleep.d
#!/bin/sh
# Remap Swap Super_L and Control_L
case "${1}" in
resume|thaw)
DISPLAY=:0.0 ; export DISPLAY
su $dadtwo -c "sleep 3; /usr/bin/xmodmap /home/dadtwo/.Xmodmap"&
;;
esac
/var/log/pm-suspend.log 显示“/usr/bin/xmodmap:无法打开显示‘:0.0’”
答案1
ldd $(type -p xmodmap)
表示xmodmap
使用来与 X 服务器通信。因此,在 X 服务器运行之前 libX11.so.6
不能使用。xmodmap
$ ldd $(type -p xmodmap)
linux-vdso.so.1 => (0x00007ffc5c1f3000)
libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007f8abffa6000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8abfbe1000)
libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f8abf9c2000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f8abf7be000)
/lib64/ld-linux-x86-64.so.2 (0x00007f8ac02db000)
libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f8abf5ba000)
libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f8abf3b4000)
在我的 Ubuntu 14.04.5 上(YMMV),通过使用pgrep X
,和ps -fp$(pgrep X)
并按照PPID
字段后退两步,我看到:
$ ps -fp1851,1801,1603
UID PID PPID C STIME TTY TIME CMD
root 1603 1 0 Jul27 ? 00:00:00 gdm
root 1801 1603 0 Jul27 ? 00:00:00 /usr/lib/gdm/gdm-simple-slave --display-id /org/gnome/DisplayManager/Displays/_0
root 1851 1801 1 Jul27 tty7 04:30:37 /usr/bin/X :0 -background none -verbose -logverbose 7 -core -auth /var/run/gdm/auth-for-gdm-ZKZ4jH/database -seat seat0 -nolisten t
它告诉我 X 服务器 ( X
),PID 1851(在我的系统上,目前,YMMV)由 PID 1801 ( /usr/lib/gdm/gdm-simple-slave
) 启动,而后者又由 PID 1603 ( ) 启动gdm
。
gdm
仅在您登录后启动gdm-simple-slave
(启动X
),因此在登录之前它将不起作用。
在开始xmodmap
之前运行,或者在 之前不放入脚本,并且已经在 X 会话中完成。X
export DISPLAY=:0
xmodmap
man xhost;xhost +local:
重新措辞的答案:
读man xhost
。
登录后,打开终端窗口并查看:
$ echo $DISPLAY
:0
允许在此系统上运行但不允许在X
服务器进程下运行的进程与服务器进程进行通信X
:
$ xhost +local:
non-network local connections being added to access control list
这将持续到您将其改回(xhost -local:
)或直到X
服务器退出,因此,如果这对您有用,请将其放在用户启动中的某个地方。
只要xhost +locakl:
有效,您就可以xmodmap
在任何上下文中运行您的(例如从/etc/pm/power.d/
),方法是:
env DISPLAY=:0 xmodmap ....
或者,如果你想使用多个xmodmap
命令,
export DISPLAY=:0
xmodmap ...
xmodmap ...
注意:允许X
通过“非网络本地连接”连接到您的服务器确实会降低系统的安全性。