📺

Vitis Theia にブラウザからアクセスする

2023/10/28に公開

結論

Vitis2023.2 に外部のマシンのブラウザからアクセスする方法

  • Node.js を 14 にする
  • vitis -b で Vitis を起動。(ポート番号はデフォルトだと 3000)
  • Windows からブラウザ経由でアクセス
    • ssh で 3000 番をポートフォワードするのが安全だと思われる
      • http://localhost:フォワードした番号 で Windows からアクセス
    • vitis -b --hostname 0.0.0.0 で起動して外部に公開する
      • http://IPアドレス:3000 でWindowsからアクセス

Vivado 2023.2 が出た

先日 Vivado 2023.2 が出ました。

その際、 Vitis が従来の Eclipse から、 Eclipse Theia ベースのIDEへと変わったようです。

Theia というのは、今までの SWT ベースのEclipse IDE ではなくて、 VSCode がベースになっているベンダーフリーな IDE の素です。

VcXsrv X Server での Vitis の表示が変

私は Linux マシンに Vivado を入れて Windows マシンから ssh 接続し、 VcXsrv X Server で GUI を表示しています。

しかし………、表示が変。

以下のように真ん中に居座って、大きさを変えることが出来ないのです。

私の個人環境ならまだしも、会社でも同じなのでちょっと困った。

しかも、 vitis_hls は Deprecated になるらしく、vitis から基本的に逃げられないっぽいのでなんとかしないと。

https://docs.xilinx.com/r/en-US/ug1399-vitis-hls/Introduction-to-Vitis-HLS-Components

Vitis にブラウザからアクセスしよう

私が初めて Theia を知ったときは、これってそもそもクラウド限定でデスクトップってなかったような気がします。(記憶違いかも)

GUI を表示してるのはたぶん単純に Electron でしょう。

ならば、単純に Theia 単体で起動できればブラウザから行けるはず!

しかし、 vitis -h とやってもそんなオプションは見当たらないのですが、 cat $XILINX_VITIS/bin/vitis とファイルを開いてみたら、以下の行が見つかりました。

    --backend|-b)
      cd $XILINX_VITIS/ide/browser-app/lnx64
      node ./node_modules/@theia/cli/bin/theia start --no-sandbox --log-level=debug --plugins=local-dir:./plugins "${@:2}"
      exit $?
      ;;

お、 vitis -b とやればどうやら行けるようです。レッツでゴー(マリオ ワンダー面白いね!)

$ vitis -b

****** Vitis Development Environment
****** Vitis v2023.2 (64-bit)
  **** SW Build 4026344 on 2023-10-11-15:42:07
    ** Copyright 1986-2022 Xilinx, Inc. All Rights Reserved.
    ** Copyright 2022-2023 Advanced Micro Devices, Inc. All Rights Reserved.

/opt/Xilinx/Vitis/2023.2/ide/browser-app/lnx64/node_modules/bindings/bindings.js:121
        throw e;

Error: Module did not self-register: '/opt/Xilinx/Vitis/2023.2/ide/browser-app/lnx64/node_modules/drivelist/build/Release/drivelist.node'.
    at Object.Module._extensions..node (node:internal/modules/cjs/loader:1282:18)
    at Module.load (node:internal/modules/cjs/loader:1076:32)
    at Function.Module._load (node:internal/modules/cjs/loader:911:12)
    at Module.require (node:internal/modules/cjs/loader:1100:19)
    at require (node:internal/modules/cjs/helpers:119:18)
    at bindings (/opt/Xilinx/Vitis/2023.2/ide/browser-app/lnx64/node_modules/bindings/bindings.js:112:48)
    at Object.<anonymous> (/opt/Xilinx/Vitis/2023.2/ide/browser-app/lnx64/node_modules/drivelist/js/index.js:25:27)
    at Module._compile (node:internal/modules/cjs/loader:1198:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1252:10)
    at Module.load (node:internal/modules/cjs/loader:1076:32) {
  code: 'ERR_DLOPEN_FAILED'
}

………あるぇ?これあれだな、 Node.js のバージョンの問題だな。ちなみに、私の環境には v18.15.0 が入っていました。

Node.js のバージョンは 14

Node.js のバージョンを 18→16→14 と下げていくと、14 で Theia の起動に成功しました。

なお、私は Node.js は nvm で管理しています。

$ nvm install 14
$ nvm use 14
$ vitis -b

****** Vitis Development Environment
****** Vitis v2023.2 (64-bit)
  **** SW Build 4026344 on 2023-10-11-15:42:07
    ** Copyright 1986-2022 Xilinx, Inc. All Rights Reserved.
    ** Copyright 2022-2023 Advanced Micro Devices, Inc. All Rights Reserved.

Starting IDE and loading packages.
Configuration directory URI: 'file:///home/nodamushi/.theia'
Configuring to accept webviews on '^.+\.webview\..+$' hostname.

外部からアクセス

単純に vitis -b で起動すると、Linuxから localhost:3000 でアクセスすることはできたのですが、127.0.0.1:3000 にしかバインドされていないので、 Windows からはアクセスできませんでした。

外部マシンからアクセスする方法は主に2つあります。

  • ssh でポートフォワード
  • Theia に外部からアクセスできるようにバインド

ssh でポートフォワード

Linux に ssh 接続した状態で使うのなら、ポートフォワードするのが手っ取り早いでしょう。

ローカルマシンの3001 番からアクセスできるようにする場合は、以下のようにして SSH 接続し、 単純に vitis -b で立ち上げます。

ssh -L 3001:localhost:3000 IPアドレス

この方法だと、Windows からは http://localhost:3001 でアクセスします。

ちなみに、VSCode のターミナルから起動して Forwared a Port コマンドで後からフォワーディングを設定するというのが地味に便利だと思います。

--hostname 0.0.0.0

このページ によると、 --hostname のオプションでバインドを変えられるようです。0.0.0.0を指定して全部にバインドして公開し、外部からアクセスすることもできます。

一応ついでに --port でポート番号も変えてみます。

$ vitis -b --hostname 0.0.0.0 --port 3333

これで Linux マシンのIPアドレス:3333 に Windows の Firefox からアクセスすることが出来ました。

Ctrl + N や Ctrl + P がブラウザに奪われて気に入らないなら、適当に Electron のアプリとか作ってアクセスすればいいですね。

まとめ

Vitis をクラウド化して別マシンからブラウザでアクセスできるようにしました。

セキュリティの問題とかはあるでしょうけど、とりあえずの手段を書いておけば後は詳しい人はより良い方法を見つけてくれるでしょう。

………といっても、どうも Vitis Theia には VSCode のプラグインを入れられれなさそうなので、結局 Vitis 上で C++ の開発はやらなさそうだなぁ。Emacs Keybind にしないと使えねぇ。

ChatGPT に内容を伝えて、アイキャッチを作ってと言って出てきた画像。うん、使えねぇ。

Discussion