wic*_*ich 7 remote keyboard x11
一个 Linux 服务器运行一个支持 XDMCP 的 xdm,它通过一个X -query <server>
命令使用 XDMCP 连接到各种不同的 Linux 和 OS X 机器。
一旦用户登录,窗口管理器就会启动,它主要是使用指定的元键从键盘控制的。
分配的元密钥需要取决于连接到 linux 服务器的盒子的平台。我如何弄清楚所连接的 X 服务器背后的平台是什么?
我无法使用 DISPLAY 环境变量打开,连接盒的 IP 是由 DHCP 分配的,不知道盒子的平台是什么。
我知道 X 的 -class 选项可用于设置显示类,然后可用于为 Xresources 中的各种显示类设置默认值。但是我不知道如何从命令行(或一个小的自定义 C 程序)获取连接的 Xserver 的类,此外,我不知道如何获取将使用该类配置的 Xresource 的值.
理想情况下,可以在运行 X 服务器的机器上配置使用的元密钥,以便在设置中引入新类型的平台时,运行 xdm 的 linux 服务器不需要任何重新配置。
解决这个问题的最佳方法是什么?是否可以确定 X 服务器运行的平台?可以将某些配置选项从 Xserver 传递到窗口管理器脚本吗?有没有更好的方法来解决这个问题?
如果您设置键盘映射,以便将相同的键符号和修饰符分配给各处的 Meta 键,那么这个特殊问题就很容易解决。
\n\n您可以通过xrdb程序获取有关服务器的一些信息。服务器定义了一些可xrdb
通过预处理使用的属性。您可以使用 打印出来xrdb -symbols
。例如,
xrdb -Dsymbols | sed -n \'s/-DSERVERHOST=//p\'\n
Run Code Online (Sandbox Code Playgroud)\n\n打印 X 服务器的主机名。您可以使用 C 预处理结构为特定服务器主机定义特定资源:
\n\n#ifdef SRVR_darkstar\n\xe2\x80\xa6\n#endif\n
Run Code Online (Sandbox Code Playgroud)\n\n这是一个将 xrdb 符号转换为 shell 环境变量的 shell 脚本。将它与类似的东西一起使用eval "$(xrdb_sh_prefix=X_ xrdb-sh)"
。
#!/bin/sh\n# Access xrdb #define\'s from the shell\n\n# For each binding that xrdb(1) would give to the preprocessor, print\n# NAME=VALUE for -DNAME=VALUE.\n# If $xrdb_sh_export is not empty, also print "export NAME".\n# If $xrdb_sh_prefix is not empty, prefix it to each NAME in output.\n# Shell metacharacters are preceded by `\\\' in VALUEs. NAMEs are\n# assumed to be admissible C identifiers.\n# Example:\n# xrdb_sh_export=y xrdb_sh_prefix=X_ xrdb-sh\n# outputs somthing like\n# X_SERVERHOST=drongo\n# export X_SERVERHOST\n# X_VENDOR=The\\ XFree86\\ Project\\,\\ Inc\n# export X_VENDOR\n# ...\n# The output of this program is typically used in a Bourne shell thus:\n# eval "`xrdb_sh_prefix=X_ xrdb-sh`"\n\nif [ -n "$xrdb_sh_export" ]; then\n awk_export=\'print "export " name\'\nfi\nawk -v prefix="$xrdb_sh_prefix" \'\n /^-D/ {\n $0 = substr($0, 3)\n eq = match($0, /=/)\n name = (prefix) (eq ? substr($0, 1, eq-1) : $0)\n if (eq) {\n $0 = substr($0, eq+1)\n sub(/^\\"/, ""); sub(/\\"$/, "")\n gsub(/[^0-9A-Z_a-z]/, "\\\\\\\\&")\n } else {\n $0 = ""\n }\n print name "=" $0\n \'"$awk_export"\'\n }\n /^exit=[0-9]+$/ {sub(/^.*=/, ""); exit $0}\n\' <<EOF\n`{ xrdb "$@" -symbols || echo exit=$?; } | $sort || echo exit=$?`\nEOF\n
Run Code Online (Sandbox Code Playgroud)\n\n另一种方法是从服务器端在根窗口上设置自定义属性,例如使用xprop
. xprop
从客户端查询这些属性(再次使用)。
xprop -set Server_arch "$(uname -m)"\n
Run Code Online (Sandbox Code Playgroud)\n