ルートなしのサーバーで予想される結果:
1)Xvfb
入力装置なしで実行するか
2)Xvfb
走り始める
背景:
ほぼ同じバージョンのCentOSを使用する2台のコンピュータがあります。あるシステムにはルートアクセスとインターネットがあり、他のシステムはサンドボックス(ルートアクセスなし)で、パッケージマネージャ(yumなし)とXserverはありません。私Xvfb
(X仮想フレームバッファ) 実験のためにターゲットコンピュータで実行ヘッドレス Firefox。働きながらXvfb
使えますxvfb-run
。
私が試したこと:
Xvfb
次のコマンドを使用して、バイナリとユーザー共有ライブラリを正常に転送しました。この方法(回答の下のコメントを参照してください)。Xvfb
このように走ることができます
Xvfb :1 -nolisten tcp -screen 0 1680x1050x16
しかし、キーマップエラーが発生します(横に:また、私が設定した一時ディレクトリの問題も処理したいと思いますexport TMPDIR=~/tmp
.)
_XSERVTransmkdir: Owner of /tmp/.X11-unix should be set to root
XKB: Failed to compile keymap
Keyboard initialization failed. This could be a missing or incorrect setup of xkeyboard-config.
(EE)
Fatal server error:
(EE) Failed to activate core devices.(EE)
物理的なキーボードやマウスのサポートはまったく必要ありません。。誰かがXvfb
入力デバイスなしでこれを実行する方法を説明できる場合は、そこで停止できます。成功せずに数時間検索してきました。
xkbを操作する方法:
xkbcomp
次のステップは、ソースマシンと共有ライブラリからインポートすることです。次に、次のようにソースマシンからキーマップファイルをエクスポートしました。
xkbcomp -xkb $DISPLAY xkbmap
私は成功せずに次のコマンドを渡してxkbdir
実行してみました。xkbmap
Xvfb :1 -xkbdir ~/X11/xkb -xkbmap xkbmap -nolisten tcp -screen 0 1680x1050x16
-xkbdir
は有効なパラメータであるにもかかわらず-xkbmap
、マニュアルページXvfbの場合:
Xserver(1) のマニュアルページに記載されている一般的なサーバーオプションに加えて、Xvfb は次のコマンドラインスイッチを受け入れます。
そしてマニュアルページXserverの場合:
−xkbdir directory
base directory for keyboard layout files. This option is not available for setuid X servers (i.e., when the X server’s real and effective uids are different).
...
−xkbmap filename
loads keyboard description in filename on server startup.
ただ-xkbdirを渡すだけ
$ export PATH=~/bin:$PATH; # all copied binaries are here, including xkbcomp
$ Xvfb :1 -xkbdir ~/X11/xkb -nolisten tcp -screen 0 1680x1050x16
それから私は得ます
_XSERVTransmkdir: Owner of /tmp/.X11-unix should be set to root
sh: /usr/bin/xkbcomp: No such file or directory <-- WHY THIS PATH?
sh: /usr/bin/xkbcomp: No such file or directory
XKB: Failed to compile keymap
Keyboard initialization failed. This could be a missing or incorrect setup of xkeyboard-config.
(EE)
Fatal server error:
(EE) Failed to activate core devices.(EE)
私が何時間も閉じ込められていた場所はここでした。ルートのないマシンで、または
Xvfb
1)入力装置なしでどのように機能しますか?または
2)どのようにXvfb
走り始めることができますか?
ベストアンサー1
部分的な答え: xkeycomp
。
説明によると、主な問題は、Xvfb
root以外のユーザー(私のシステムでは正しく動作します)で実行されていないようですが、root以外のユーザーはxkeycomp
ヘルパープログラムと関連データファイルをXvfb
期待どおりの場所にインストールできません。
サンドボックスCentOS環境に何がインストールされていてインストールされていないのかを正確に知らないと、シミュレーションは困難です。しかし、xkeycomp
依存関係を削除する方法は次のとおりです。
strings
onを使用して示されているように、呼び出しは次のようになり、対応するXvfb
ソースxkeycomp
ファイル"%s%sxkbcomp" -w %d %s -xkm "%s" -em1 %s -emp %s -eml %s "%s%s.xkm"
は次のようになります。xkb初期化プログラムそしてddxLoad.c。おおよその検査でパスがxkbcomp
固定されているようです。ただし、文字列は、Xvfb
次の説明をコンパイルすることを提案するスクリプト呼び出しに置き換えることができるほど長いです。
xkb_keymap "default" {
xkb_keycodes { include "evdev+aliases(qwerty)" };
xkb_types { include "complete" };
xkb_compatibility { include "complete" };
xkb_symbols { include "pc+us+inet(evdev)" };
xkb_geometry { include "pc(pc105)" };
};
からstdin
ファイルとして提供します/tmp/server-1.xkm
。そのため、Xとツールを搭載したコンピュータでは、この説明をファイル(たとえば)にコピーしてdefault.xkb
コンパイルしてください。
xkbcomp -xkm default.xkb
到着するdefault.xkm
。次に、Xvfb
呼び出しを検索してCentOSサンドボックスからコピーをパッチします。
$ grep -FobUa '"%s%sxkbcomp' Xvfb
1648800:"%s%sxkbcomp
以下を呼び出してパッチしますcp
。
echo -n '/bin/cp /home/dirk/tmp/xvfb/default.xkm /tmp/server-1.xkm ' | dd bs=1 of=Xvfb seek=1648800 conv=notrunc
(もちろん、あなたの場所とルートも同じですdefault.xkm
)。
私のコンピュータでは正常に動作しましたが、Sandbox CentOSコンピュータでは次の問題が発生する可能性があります。 :-)
X APIは実際の入力デバイスからキーマップを検証する機能を分離するため、入力デバイスがなくてもキーマップが存在する必要があります。