Windows で WSL2 と VcXsrv を使用して複数のモニターでグラフィカル アプリケーションを起動する効率的な方法

Windows で WSL2 と VcXsrv を使用して複数のモニターでグラフィカル アプリケーションを起動する効率的な方法

私は Windows で WSL2 を使用していますが、現在は主にカスタマイズした emacs を起動するためだけに使用しています。emacs を起動するためのワークフローは少し面倒です。起動するたびに、複数のモニター設定で Xsrv アプリケーションを起動する必要があります。次に、新しい Windows ターミナルを開き、Ubuntu 18.04 を開いて、Xfce4 グラフィカル環境を起動します。次に、このグラフィカル環境でターミナルを起動し、最後にemacsコマンドを使用して emacs を起動します。

お気づきのとおり、複数のモニターで使用できる emacs のグラフィカル バージョンを実行するには、かなりの手順が必要です。私の質問は、このプロセスを加速させるにはどうすればよいかということです。現在、いくつかの自動ホットキー スクリプトを作成し、デフォルトで WSL2 を使用してグラフィカル セッションを開始できるかどうかを確認するというアイデアがあります。ヒントをいくつか提供していただければ幸いです。これらのアイデアは、私が実行できる最善のものですが、それとも、いくつかの操作で emacs のグラフィカル バージョンを実行できる他のトリックがありますか?

答え1

設定次第で VcXsrv の起動を自動化できます。私がやったのはまさにそれです。

パート 1: VcXsrv を自動的に起動する

vcxsrv を実行すると、毎回構成画面がポップアップ表示されます。
最後の構成画面に到達すると、保存するオプションがあります。次に、保存した構成を指すショートカットを作成し、スタートアップに配置します。 こちらはスーパーユーザーの投稿ですvcxsrv を自動的に起動するさまざまな方法について説明します。

パート2: ディスプレイをエクスポートする

x11 は、ウィンドウ コマンドを別の IP アドレス (およびデスクトップ) に「転送」することをサポートしています。これにより、Windows リモート デスクトップのようなものが可能になります。多くの点/ほとんどの点で優れていますが、すべてではありません。この機能は、最初から x11 に搭載されています。

ディスプレイをエクスポートするには、x11 アプリケーションを起動する前に DISPLAY 環境変数を設定する必要があります。通常、これを行う最善の方法は、エクスポート コマンドを ~/.bashrc ファイル (bash を使用している場合) に追加して、毎回実行しなくても済むようにすることです。行は次のようになります。0.0 はexport DISPLAY=<ip_address>:0.0 ターゲットとするデスクトップを指しますが、ここでは混乱を避けるために、単に 0.0 を使用します。

これを簡単に実現する方法は、bash ターミナルで次のコマンドを実行することです。

  1. echo "export DISPLAY=localhost:0.0" >> ~/.bashrc
  2. source ~/.bashrc(またはここでターミナルを再起動することもできます)

これで、必要な x11 アプリケーションを起動して、Windows に表示させる準備が整いました。

特定のアプリケーションで障害が発生する場合は、VcXsrv 内で OpenGL サポートを無効にしてみてください。この設定を無効にするまで、VisualStudio Code を起動できませんでした。

パート 3: Linux x11 を実行するための Windows ショートカット!

  1. bash.exe (または wsl.exe) への Windows ショートカットを作成します。
  2. 「ターゲット:」ボックスの「.exe」の後に「-c [x11_thing_to_run]」を追加します (wsl.exe の場合は -c ではなく --exec です)
  3. グラフィカルモードで起動しない場合は、次のように DISPLAY 環境を行に再度追加します。bash.exe -c "DISPLAY=127.0.0.1:0.0 xemacs"
  4. ショートカットの名前を x11 に変更し、非常に目立つアイコンを割り当てます。 ここに画像の説明を入力してください

完成品 ここに画像の説明を入力してください

答え2

セニョールCMasMasからの回答すべてにおいて正しいです。ただし、WSL 2 を使用している場合はlocalhost動作しません。少なくとも、この記事の執筆時点では動作しません。(WSL チームがこの問題に対処するために取り組んでいるという噂があります。)

その理由は、WSL 2 では、Ubuntu (またはその他のもの) が Windows マシンの一部としてではなく、別の (仮想) マシンに配置されるためです (WSL 1 の場合と同様)。

これを修正するには、次のように計算する必要がありますDISPLAY

export DISPLAY=$(awk '/nameserver / {print $2; exit}' /etc/resolv.conf 2>/dev/null):0

これを実行する良い方法は、ファイルに入れて忘れてしまうことです~/.bashrc。ただし、WSL へのログインはログイン シェルである必要があり、そうでないと実行されません。

へのリンクを使用する場合bash.exe、これはより簡単な方法だと思いますが、コマンドは次のようになります。

 bash.exe -i -c emacs

これは-i、シェルが対話型である必要があること、つまり、完全なログイン スクリプトを実行する必要があることを意味します。

しかし、コマンド(emacs)が実行されている限り、bashウィンドウは開いたままになります。私はCygwinをインストールしているので、runコマンドを起動して終了するコマンドを利用しています。これが私のコマンドです。

C:\cygwin64\bin\run.exe bash -i -c emacs

関連情報