状態

状態

状態

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

別の方法は、次のようにサーバー側のルートウィンドウにカスタムプロパティを設定することです。xpropxpropクライアントはこれらの属性を照会します(再利用)。

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

おすすめ記事