Xpra
Xpra は 'screen for X' です: リモートホストで X プログラムを実行して、ディスプレイをローカルマシンに飛ばすことができ、状態を維持したままプログラムから切断して他のマシンから再接続できます。Xpra を使うことで個別のアプリケーションにリモートアクセスすることが可能になります。
- Xpra は "rootless" あるいは "seamless" です: Xpra で実行したプログラムは普通のプログラムと同じようにデスクトップに表示され、ウィンドウマネージャで管理されます。
- SSH を通してセッションにアクセスしたり、パスワードで保護した平文の TCP ソケットを使うことができます。
- Xpra は接続速度が遅くても使うことができ、ネットワークの帯域幅の変化に対応します (アダプティブ JPEG モードを参照)。
- Xpra はオープンソース (GPLv2+)、マルチプラットフォーム、多言語対応です。クライントは Python と Java で書かれています。
目次
インストール
サーバーとクライントの両方で AUR から xpra-winswitchAUR パッケージをインストールしてください。
使用方法
アプリケーションを実行したいマシンで xpra サーバーを起動 (例としてディスプレイ番号は 7 を使用):
$ xpra start :7
それからアプリケーションを実行します (例: firefox):
$ DISPLAY=:7 firefox
もしくは、コンソールを閉じても問題ないように screen セッションを起動してプログラムを実行するには:
$ DISPLAY=:7 screen [screen starts] $ firefox
上記のように screen
を起動したときはプログラムを起動する際にディスプレイ番号を指定する必要はありません。自動的に xpra のディスプレイで実行されます。
上のコマンドを実行しても、ウィンドウはまだ表示されません。アプリケーションをディスプレイに表示するには、xpra サーバーに接続しなければなりません。同一マシン上にある xpra サーバーに接続する場合、以下のように xpra クライアントを起動してください:
$ xpra attach :7
もしくは、ssh を介してリモートマシンに接続する場合:
$ xpra attach ssh:user@example.com:7
クライアントの起動後、リモートサーバーのディスプレイで実行されているプログラムは全てローカルマシンの画面に表示されます。解除するには、ctrl-c
と入力するか以下のコマンドを使用:
$ xpra detach ssh:user@example.com:7
プログラムはサーバー側で実行し続けるので後から再度表示することもできます。
サーバーを停止するには、サーバーを実行しているマシンで次を実行:
$ xpra stop :7
あるいはリモートから停止する場合:
$ xpra stop ssh:user@example.com:7
詳しいマニュアルは man xpra
を確認してください。
ヒントとテクニック
ブート時に起動
サーバー
systemd ユニットを使うことで xpra サーバーをブート時に起動することができます。
ユニットファイルを作成:
/etc/systemd/system/xpra@.service
[Unit] Description=xpra display [Service] Type=simple User=%i EnvironmentFile=/etc/conf.d/xpra ExecStart=/usr/bin/xpra --no-daemon start ${%i} [Install] WantedBy=multi-user.target
そして設定を作成して、xpra ディスプレイを表示したいユーザーの行を追加します:
/etc/conf.d/xpra
myusername=:7
ディスプレイを表示するユーザーを指定してサービスを有効化してください。上記の例なら、サービスは次のようになります: xpra@myusername.service
。
クライアント
方法 1: .xinitrc
~/.xinitrc
ファイルに接続を開始するのに必要な行を追加してください。行末には & を付けます。
exec
行の前に追加するようにしてください。
例えば、リモートクライアントの場合なら以下のようになります:
~/.xinitrc
xpra attach ssh:user@example.com:7 &
方法 2: systemd ユーザーセッション
systemd ユーザーセッションを使うようにセッションを設定します。詳しくは Systemd/ユーザー を参照。
以下のサービスユニットを作成:
$HOME/.config/systemd/user/xpra-client@.service
[Unit] Description=xpra client [Service] Type=simple EnvironmentFile=%h/.config/conf/xpra_client ExecStart=/usr/bin/xpra attach %i $OPTS [Install] WantedBy=default.target
適当なオプションを使って設定ファイルを作成:
$HOME/.config/conf/xpra_client
OPTS=--encoding=jpeg --quality=90
サービス名は xpra-client@ssh:username@hostname:<display number>.service
という形式になります。例:
xpra-client@ssh:myuser@example.com:7.service
サービスを有効化してください。systemctl
コマンドに --user
フラグを付けるのを忘れずに。