X Server の X410 を試してみる

## 1. はじめに

WSL に最適化した Linux ディストリビューション [WLinux](https://whitewaterfoundry.com/WLinux/
) のアナウンスの中で，`X410` の情報があったので試してみました．`WLinux` は情報が出てくるまでしばらく様子見します．`X410` が 88% オフの 580円 だったのも購入した要因の一つです．定価の 4,650 円なら試してないかもしれません．

## 2. X410

### 動作確認

Microsoft Store から `X410` をインストールします．他の X Server (VcXsrv など) が動作を止めて，X410 を起動します．他の X Server などを動作させていたなら設定されていると思いますが，環境変数などの設定をします．ターミナルから下記のように設定てして，X アプリを起動します．

```bash
$ export DISPLAY=localhost:0.0
$ export LIBGL_ALWAYS_INDIRECT=1
```

動作に問題がなければ，上記設定を，`~/.bash_profile` などに追加します．

### ターミナルの変更

今までは，`Hyper` を使っていましたが，更新もあまりされなくなった(?)ので，Linux のターミナル `tilix` に乗り換えます．`apt` を使ってインストールします．手順は[ここ]($https://token2shell.com/howto/x410/setting-up-wsl-for-linux-gui-apps/) にあります．


```bash
$ sudo -E apt install tilix
$ sudo -E apt install libsecret
$ sudo -E apt install dbus-x11

$ dbus-launch --exit-with-x11
$ tilix &
```

`dbus-launch` の起動でエラーがでたら上記サイトを参考にしてください．私は問題なく動作してので試していません．

このままでは，ログインシェルにならないので，`tilix` の設定から `Run command as a login shell` にチェックをいれます．

`tilix` 起動時に `Vte-WARNING` が表示されますが，Ubuntu の `libvte` が `PCRE2` をサポートしなくなったのが要因のようですが，私の使っている範囲では，問題がないので放っておきます．気になる方は，他のターミナルを使うのが良いかと思います．

このままだと，`tilix` の起動が面倒なので，[ここ](https://token2shell.com/howto/x410/opening-linux-terminal-directly-from-file-explorer/) と [ここ](https://token2shell.com/howto/x410/setting-up-wsl-for-linux-gui-apps/) を参考に設定します．

適当な場所に，`bat-launcher.vbs`,`open-x410-wsl-shell.bat` を作成します(私は，`C:\Programs\bin\wsl` です)．

```vb:bat-launcher.vbs
If WScript.Arguments.Count <= 0 Then
    WScript.Quit
End If

bat = Left(WScript.ScriptFullName, InStrRev(WScript.ScriptFullName, "\")) & WScript.Arguments(0) & ".bat"
arg = ""

If WScript.Arguments.Count > 1 Then
    arg = WScript.Arguments(1)
Else
    arg = "c:\home\xxx"
End If

CreateObject("WScript.Shell").Run """" & bat & """ """ & arg & """", 0, False
```

(`c:\home\xxx` は, WSL のホームディレクトリです.)

```:open-x410-wsl-shell.bat
@echo off

REM ### Start X410 in Windowed Apps Mode. If X410 is already running in Desktop Mode,
REM ### it'll be terminated first without any warning message box.

start /B x410.exe /wm

REM ### Setup a D-Bus instance that will be shared by all X-Window apps

ubuntu1804.exe run "sh -ic 'if [ -z \"$(pidof dbus-launch)\" ]; then export DISPLAY=localhost:0.0; dbus-launch --exit-with-x11; fi;'"

REM ### Go to the selected folder path and open your terminal app

ubuntu1804.exe run "exec tilix --display=localhost:0.0 --geometry 90x90-0-0 --working-directory=\"$(wslpath '%1')\""
```

(`tilix` の引数は適当に設定してください．)


あとは，コンテキストメニュー（右クリック）の新規作成からショートカットを作成します．項目の場所に
`wscript.exe "c:\Programs\bin\wsl\bat-launcher.vbs" "open-x410-wsl-shell"` にして，名前を `tilix` にします．アイコンなどは好みに応じて変更してもいいと思います．ショートカットをダブルクリックすると，`tilix` が X410 経由で起動します．

#### 不具合

少し使っていたら，`pipenv shell` がクラッシュしたので，`tilix` の不具合かなと思って検索したら [ここ](https://github.com/pypa/pipenv/issues/2743) に引っ掛かりました．どうやら `pipenv` 側の不具合みたいなので，アップデートされるまでは，`export PIPENV_SHELL="$SHELL"` を設定してしのぎます．

### Emacs

基本的には，ターミナルから起動することが多いのですが，直接起動したいときもあるので，ショートカットを作成します．`bat-launcher.vbs` と同じところに `start-emacs.bat` を作成します．

```:start-emacs.bat
@echo off

REM ### Start X410 in Windowed Apps Mode. If X410 is already running in Desktop Mode,
REM ### it'll be terminated first without any warning message box.

start /B x410.exe /wm

REM ### Start Emacs

ubuntu1804.exe run "cd \"$(wslpath '%1')\"; export DISPLAY=localhost:0.0; exec /bin/bash -lc emacs
```

`tilix` と同じようにショートカットを作成して，場所を `wscript.exe "c:\Programs\bin\wsl\bat-launcher.vbs" "start-emacs"` にします．ダブルクリックして `Emacs` が起動することを確認します．

## 3. おわりに

取り敢えずしばらく使ってみます．~~Windows 側のフォントも `/etc/fonts/local.conf` でできるようですが，もろもろ影響がでそうなので止めておきます．~~ `fontconfig` の設定で `X410` は関係ないですね．