「Xpra」の版間の差分
Kusakata.bot (トーク | 投稿記録) (Pkg/AUR テンプレートの更新) |
Kusakata.bot (トーク | 投稿記録) (Pkg/AUR テンプレートの更新) |
||
(他の1人の利用者による、間の5版が非表示) | |||
1行目: | 1行目: | ||
[[Category:X サーバー]] |
[[Category:X サーバー]] |
||
+ | [[カテゴリ:リモートデスクトップ]] |
||
[[en:Xpra]] |
[[en:Xpra]] |
||
Xpra は '[[screen]] for X' です: リモートホストで X プログラムを実行して、ディスプレイをローカルマシンに飛ばすことができ、状態を維持したままプログラムから切断して他のマシンから再接続できます。Xpra を使うことで個別のアプリケーションにリモートアクセスすることが可能になります。 |
Xpra は '[[screen]] for X' です: リモートホストで X プログラムを実行して、ディスプレイをローカルマシンに飛ばすことができ、状態を維持したままプログラムから切断して他のマシンから再接続できます。Xpra を使うことで個別のアプリケーションにリモートアクセスすることが可能になります。 |
||
9行目: | 10行目: | ||
==インストール== |
==インストール== |
||
− | サーバーとクライントの両方で |
+ | サーバーとクライントの両方で {{Pkg|xpra}} パッケージを[[インストール]]してください。 |
{{Tip|1={{ic|nvidia}} や {{ic|ATi}} などのグラフィックドライバーを使って既存の Xorg セッションでローカルに Xpra を実行する場合、デフォルトの xpra の設定を変更する必要があります。Xpra は {{ic|xorg-server-xvfb}} ({{ic|/etc/X11/xorg.conf.d}} になります) から {{ic|-configdir}} を取得しますが、そこで xpra をローカルに実行するために [https://bbs.archlinux.org/viewtopic.php?pid=1333056#p1333056 1333056#p1333056] に書かれている手順に従って変更が必要です。}} |
{{Tip|1={{ic|nvidia}} や {{ic|ATi}} などのグラフィックドライバーを使って既存の Xorg セッションでローカルに Xpra を実行する場合、デフォルトの xpra の設定を変更する必要があります。Xpra は {{ic|xorg-server-xvfb}} ({{ic|/etc/X11/xorg.conf.d}} になります) から {{ic|-configdir}} を取得しますが、そこで xpra をローカルに実行するために [https://bbs.archlinux.org/viewtopic.php?pid=1333056#p1333056 1333056#p1333056] に書かれている手順に従って変更が必要です。}} |
||
==使用方法== |
==使用方法== |
||
+ | 詳しいマニュアルは {{ic|man xpra}} を確認してください。 |
||
+ | |||
+ | === アプリケーションの実行 === |
||
アプリケーションを実行したいマシンで xpra サーバーを起動 (例としてディスプレイ番号は '''7''' を使用): |
アプリケーションを実行したいマシンで xpra サーバーを起動 (例としてディスプレイ番号は '''7''' を使用): |
||
44行目: | 48行目: | ||
{{bc|$ xpra stop ssh:user@example.com:7}} |
{{bc|$ xpra stop ssh:user@example.com:7}} |
||
+ | === デスクトップ環境の実行 === |
||
− | 詳しいマニュアルは {{ic|man xpra}} を確認してください。 |
||
+ | デスクトップを実行するには (サーバー側で実行): |
||
+ | {{Bc|$ <nowiki>xpra start-desktop :7 --start-child=xfce4-session --exit-with-children</nowiki>}} |
||
+ | * {{Ic|:7}} は xorg の DISPLAY セッションの数字 |
||
+ | * {{Ic|<nowiki>--start-child=xfce4-session</nowiki>}} は xpra サーバーの子プロセスとして xfce4 セッションを実行 |
||
+ | * {{Ic|--exit-with-children}} はセッションからログアウトした (子プロセスが終了) 際にサーバーを終了 |
||
+ | アタッチするには (サーバー側で実行): |
||
+ | {{Bc|$ xpra attach :7}} |
||
+ | アタッチするには (クライアント側で実行): |
||
+ | {{Bc|$ xpra attach ssh:user@example.com:7}} |
||
+ | デタッチするにはターミナルで ctrl+c を押すか以下のコマンドを実行: |
||
+ | {{Bc|$ xpra detach :7}}{{Tip|画面の解像度は [[xrandr]] で変更できます。}} |
||
+ | |||
+ | ===シャドウリモートデスクトップの実行=== |
||
+ | 既存のディスプレイサーバーを複製するには: |
||
+ | * ssh でログインしているユーザーと同じユーザーでディスプレイを認証する必要があります。 |
||
+ | * ディスプレイをリモートスクリーンで表示する必要があります。 |
||
+ | |||
+ | シャドウデスクトップを実行するにはクライアント側で以下のコマンドを実行: |
||
+ | |||
+ | {{bc|$ xpra shadow ssh:DISPLAY_user@example.com:DISPLAY_number}} |
||
+ | |||
+ | === Xorg サンドボックスとして実行 === |
||
+ | [[Firejail]] を使うことでサンドボックスを作成できます: |
||
+ | * アプリケーションのサンドボックスの場合 ({{Ic|eth0}} は適当なインターフェイス名か {{Ic|none}} に置き換えてください): |
||
+ | {{Bc|$ <nowiki>firejail --x11=xpra --net=eth0 firefox</nowiki>}} |
||
+ | * xpra をアタッチする場合: |
||
+ | {{bc|$ <nowiki>firejail --net=eth0 xpra [...]</nowiki>}} |
||
+ | |||
+ | {{Note|{{ic|<nowiki>--net=eth0</nowiki>}} はネットワーク用の名前空間を作成して xorg やシステムソケットを xpra から遮蔽します。この設定を行わないとサンドボックスはあまり意味をなしません ([https://github.com/netblue30/firejail/issues/57#issuecomment-153757284 issue-54#153757284])。}} |
||
==ヒントとテクニック== |
==ヒントとテクニック== |
||
108行目: | 141行目: | ||
{{bc|xpra-client@ssh:myuser@example.com:7.service}} |
{{bc|xpra-client@ssh:myuser@example.com:7.service}} |
||
サービスを[[デーモン|有効化]]してください。{{ic|systemctl}} コマンドに {{ic|--user}} フラグを付けるのを忘れずに。 |
サービスを[[デーモン|有効化]]してください。{{ic|systemctl}} コマンドに {{ic|--user}} フラグを付けるのを忘れずに。 |
||
+ | |||
+ | == トラブルシューティング == |
||
+ | |||
+ | === Error: Only console users are allowed to run the X server === |
||
+ | エラーによって実行が失敗する場合 {{Ic|/etc/X11/Xwrapper.config}} ファイルを以下の内容で作成してください: |
||
+ | {{Hc|/etc/X11/Xwrapper.config|2=allowed_users=anybody}} |
||
==参照== |
==参照== |
2018年6月10日 (日) 19:03時点における最新版
Xpra は 'screen for X' です: リモートホストで X プログラムを実行して、ディスプレイをローカルマシンに飛ばすことができ、状態を維持したままプログラムから切断して他のマシンから再接続できます。Xpra を使うことで個別のアプリケーションにリモートアクセスすることが可能になります。
- Xpra は "rootless" あるいは "seamless" です: Xpra で実行したプログラムは普通のプログラムと同じようにデスクトップに表示され、ウィンドウマネージャで管理されます。
- SSH を通してセッションにアクセスしたり、パスワードで保護した平文の TCP ソケットを使うことができます。
- Xpra は接続速度が遅くても使うことができ、ネットワークの帯域幅の変化に対応します (アダプティブ JPEG モードを参照)。
- Xpra はオープンソース (GPLv2+)、マルチプラットフォーム、多言語対応です。クライントは Python と Java で書かれています。
目次
インストール
サーバーとクライントの両方で xpra パッケージをインストールしてください。
使用方法
詳しいマニュアルは man xpra
を確認してください。
アプリケーションの実行
アプリケーションを実行したいマシンで 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
デスクトップ環境の実行
デスクトップを実行するには (サーバー側で実行):
$ xpra start-desktop :7 --start-child=xfce4-session --exit-with-children
:7
は xorg の DISPLAY セッションの数字--start-child=xfce4-session
は xpra サーバーの子プロセスとして xfce4 セッションを実行--exit-with-children
はセッションからログアウトした (子プロセスが終了) 際にサーバーを終了
アタッチするには (サーバー側で実行):
$ xpra attach :7
アタッチするには (クライアント側で実行):
$ xpra attach ssh:user@example.com:7
デタッチするにはターミナルで ctrl+c を押すか以下のコマンドを実行:
$ xpra detach :7
シャドウリモートデスクトップの実行
既存のディスプレイサーバーを複製するには:
- ssh でログインしているユーザーと同じユーザーでディスプレイを認証する必要があります。
- ディスプレイをリモートスクリーンで表示する必要があります。
シャドウデスクトップを実行するにはクライアント側で以下のコマンドを実行:
$ xpra shadow ssh:DISPLAY_user@example.com:DISPLAY_number
Xorg サンドボックスとして実行
Firejail を使うことでサンドボックスを作成できます:
- アプリケーションのサンドボックスの場合 (
eth0
は適当なインターフェイス名かnone
に置き換えてください):
$ firejail --x11=xpra --net=eth0 firefox
- xpra をアタッチする場合:
$ firejail --net=eth0 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
フラグを付けるのを忘れずに。
トラブルシューティング
Error: Only console users are allowed to run the X server
エラーによって実行が失敗する場合 /etc/X11/Xwrapper.config
ファイルを以下の内容で作成してください:
/etc/X11/Xwrapper.config
allowed_users=anybody