상태

상태

상태

Linux 서버는 다양한 Linux 및 OS X 시스템에 연결하기 위해 명령을 통해 XDMCP를 사용하는 XDMCP 지원 xdm을 실행하고 있습니다 X -query <server>.

사용자가 로그인하면 지정된 메타 키를 사용하여 키보드를 통해 제어되는 창 관리자가 시작됩니다.

질문

할당하는 메타키는 Linux 서버에 연결된 상자의 플랫폼에 따라 다릅니다. 연결된 X 서버 뒤에 어떤 플랫폼이 있는지 어떻게 확인합니까?

아이디어

DISPLAY 환경 변수를 사용하여 열 수 없습니다. 연결 박스의 IP는 DHCP에 의해 할당됩니다. 연결 박스의 플랫폼이 무엇인지 알 수 없습니다.

나는 X의 -class 옵션을 사용하여 디스플레이 클래스를 설정할 수 있다는 것을 알고 있습니다. 그런 다음 Xresources의 다양한 디스플레이 클래스에 대한 기본값을 설정하는 데 사용할 수 있습니다. 하지만 명령줄(또는 일부 사용자 정의 C 프로그램)에서 연결된 Xserver의 클래스를 가져오는 방법을 모르고 더 나아가 해당 클래스로 구성된 Xresource의 값을 가져오는 방법도 모릅니다.

이상적으로는 X 서버를 실행하는 시스템에서 사용되는 메타키를 구성할 수 있으므로 새로운 유형의 플랫폼이 설정에 도입될 때 xdm을 실행하는 Linux 서버에서 재구성이 필요하지 않습니다.

이 문제를 해결하는 가장 좋은 방법은 무엇입니까? X 서버가 어떤 플랫폼에서 실행되고 있는지 확인할 수 있습니까? Xserver의 특정 구성 옵션을 창 관리자 스크립트로 전달할 수 있습니까? 이 문제를 해결하는 더 좋은 방법이 있습니까?

답변1

이 특별한 문제는 동일한 키 기호와 수정자가 모든 곳의 메타 키에 할당되도록 키맵을 설정하면 쉽게 해결됩니다.


서버에 대한 정보를 얻을 수 있습니다.데이터 베이스프로그램. 서버는 일부 속성을 정의합니다.xrdb전처리를 통해 사용할 수 있도록 합니다. 인쇄를 이용하시면 됩니다 xrdb -symbols. 예를 들어,

xrdb -Dsymbols | sed -n 's/-DSERVERHOST=//p'

X 서버의 호스트 이름을 인쇄합니다. C 전처리기 구조를 사용하여 특정 서버 호스트에 대한 특정 리소스를 정의할 수 있습니다.

#ifdef SRVR_darkstar
#endif

이것은 xrdb 기호를 쉘 환경 변수로 변환하는 쉘 스크립트입니다. 이와 같은 것을 사용하십시오 eval "$(xrdb_sh_prefix=X_ xrdb-sh)".

#!/bin/sh
# Access xrdb #define's from the shell

# For each binding that xrdb(1) would give to the preprocessor, print
# NAME=VALUE for -DNAME=VALUE.
# If $xrdb_sh_export is not empty, also print "export NAME".
# If $xrdb_sh_prefix is not empty, prefix it to each NAME in output.
# Shell metacharacters are preceded by `\' in VALUEs. NAMEs are
# assumed to be admissible C identifiers.
# Example:
#   xrdb_sh_export=y xrdb_sh_prefix=X_ xrdb-sh
# outputs somthing like
#    X_SERVERHOST=drongo
#    export X_SERVERHOST
#    X_VENDOR=The\ XFree86\ Project\,\ Inc
#    export X_VENDOR
# ...
# The output of this program is typically used in a Bourne shell thus:
#   eval "`xrdb_sh_prefix=X_ xrdb-sh`"

if [ -n "$xrdb_sh_export" ]; then
  awk_export='print "export " name'
fi
awk -v prefix="$xrdb_sh_prefix" '
  /^-D/ {
    $0 = substr($0, 3)
    eq = match($0, /=/)
    name = (prefix) (eq ? substr($0, 1, eq-1) : $0)
    if (eq) {
        $0 = substr($0, eq+1)
        sub(/^\"/, ""); sub(/\"$/, "")
        gsub(/[^0-9A-Z_a-z]/, "\\\\&")
    } else {
        $0 = ""
    }
    print name "=" $0
    '"$awk_export"'
  }
  /^exit=[0-9]+$/ {sub(/^.*=/, ""); exit $0}
' <<EOF
`{ xrdb "$@" -symbols || echo exit=$?; } | $sort || echo exit=$?`
EOF

또 다른 방법은 다음과 같이 서버 측에서 루트 창에 사용자 정의 속성을 설정하는 것입니다.xprop. xprop클라이언트에서 이러한 속성을 쿼리합니다(다시 사용됨).

xprop -set Server_arch "$(uname -m)"

관련 정보