LoginSignup
0
1

docker で GUI アプリをブラウザ上に追い出す方法(Xpra)

Last updated at Posted at 2023-10-28

ターミナル
$ xpra start --bind-tcp=0.0.0.0:9876 --start='xhost +local:root'
$ docker run --rm -e DISPLAY=:1 -v /tmp/.X11-unix:/tmp/.X11-unix:ro gns3/xeyes

はじめに

サーバに ssh などで接続して、作業することがあるが、GUI アプリををブラウザに追い出して実行することができると便利ではないだろうか?今回は Xpra 上に Docker をつないで追い出してみよう。コンテナごとにセッションを立てると区別しやすい。ただしこの方法はあまりセキュリティ上よろしい方法ではない。

Xpra のインストール

ubuntu では以下の方法でインストールできる。

$ sudo apt install xpra -y

最新版は以下から入手できる。

Xpra 自体はtmux のようにセッションを保存するものだ。接続が切れても計算などを続けることができる。

Docker のインストール

以下のシェルスクリプトを実行する。

docker_install.sh
#!/bin/bash

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg -y
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
  | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Add the repository to Apt sources:
echo \
  "deb [arch="$(dpkg --print-architecture)" \
  signed-by=/etc/apt/keyrings/docker.gpg] \
  https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io \
  docker-buildx-plugin docker-compose-plugin -y

# To run whitout sudo
sudo gpasswd -a $(whoami) docker

インストールできたら再起動する。

Xpra をブラウザ上で使うには下のようにする。

$ xpra start --bind-tcp=0.0.0.0:9876 --start='xhost +local:root'
Entering daemon mode; any further errors will be reported to:
  /run/user/1000/xpra/S41111.log
Actual display used: :1
Actual log file name is now: /run/user/1000/xpra/:1.log

--bind-tcp はポート番号を指定する。0.0.0.0 はすべてコンピュータからアクセスを受けいるれという意味だ。 9876 の部分に使ってよいポート番号を指定する。--html オプションはブラウザ上で実行できるかを決める。--start オプションは実行するコマンドを決める。ディスプレイは :1 が使われていることがわかる。

では、ブラウザで http://<ip>:9876 に接続してみよう。接続状態を見るには下のようにする。

ディスプレイが :1 だとわかるのでこれをつないで、接続してみよう。gns3/xeyes は xeyes の Image だ。

$ docker run --rm -e DISPLAY=:1 -v /tmp/.X11-unix:/tmp/.X11-unix:ro gns3/xeyes &

スクリーンショット (4).png

Docker で作業が終わったら、Xpra も消しておこう。ディスプレイは :1 だったので、

$ xpra stop :1

便利なオプション

複数のブラウザで同じディスプレイを開ける。

--sharing=yes

ユーザ名と環境変数 XPRA_PASSWORD に指定したパスワードで認証する。

--tcp-auth=env

参考

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1