Windows 11のWSL2にインストールしたUbuntu上で、Emacsを快適に使うためにX Windowを設定しました。RedHat(CentOS)系のAlmaLinuxやRocky Linuxなどでも同様の手順になります。
X Windowの設定
VcXsrv Windows X ServerのDownloadをクリックしてから、ダウンロードファイルを使ってインストールを行います。デスクトップに「XLaunch」というショートカット(実態はC:\Program Files\VcXsrv\xlaunch.exe)が作成されるので、これを起動します。メニューに従い、以下の項目を選択しながら「次へ」をクリックして行きます。
- Multiple windows
- Start no client
「Extra settings」画面になったら、下部にある「Additional parameters for VcXsrv」に「-ac」と入力します。
「Finish configuratoin」画面になりますので、「Save configuration」ボタンをクリックして、「config.xlaunch」を保存してから完了ボタンをクリックします。
次に、Windowsマークの右クリックから「ファイル名を指定して実行」画面を開き、「shell:startup」と入力します。
先ほど保存した「config.xlaunch」ファイルのショットカットをスタートアップに置きます。これで、Windows起動時にX Windowを自動的に設定することができます。
Emacsの設定
WSL2のUbuntuにEmacsをインストールします。
$ sudo apt install emacs
RedHat(CentOS)系なら次のコマンドになります。AlmaLinuxやRocky Linuxなどにインストールするときに使います。
$ sudo dnf install emacs
Emacsの設定ファイルを「~/.emacs.d/init.el」に作成します。サンプルを以下に示します。
;; テーマ
(load-theme 'misterioso' t)
;; スタートアップメッセージを表示させない
(setq inhibit-startup-message t)
;; 列数を表示する
(setq column-number-mode t)
;; タブを4文字に設定
(setq default-tab-width 4)
;;ウィンドウを左右に分割したとき用の設定
(setq-default truncate-partial-width-windows t)
;; メニューバーを非表示
;(menu-bar-mode 0)
;; ツールバーを非表示
(tool-bar-mode 0)
;; ファイルのフルパスをタイトルバーに表示
(setq frame-title-format
(format "%%f - Emacs@%s" (system-name)))
;; サイズ
(set-frame-size (selected-frame) 130 50)
;; カーソル
(set-cursor-color "#ffffff")
これで、ターミナルから「emacs」と入力することで、Emacsを別ウインドウで開くことができました。
export DISPLAYによる表示画面の設定
もし上手く行かないようでしたら、ホームディレクトリの.bashrcに以下を追加して有効にして下さい。
export DISPLAY=$(cat /etc/resolv.conf | grep -m1 nameserver | awk '{print $2}'):0.0
上記でもDISPLAYの設定が機能しないようでしたら、代わりに、以下の行を.bashrcに追加して有効にして下さい。
export DISPLAY=$(ifconfig | grep -m1 inet | awk '{print $2}'):0.0
なお、ifconfigコマンドがインストールされていない場合は、次の処理をターミナルで実行してインストールします。
$ sudo apt install net-tools
それでも動かないという方は、祈りながら下記を.bashrcに追加してから、「source .bashrc」しましょう。
export DISPLAY=$(/mnt/c/WINDOWS/system32/route.exe print | grep 0.0.0.0 | head -1 | awk '{print $4}'):0.0
この設定でエラーが大量に出た場合は、以下の設定が有効かも知れません(”runtime-emacs”部分は任意文字列)。
export XDG_RUNTIME_DIR=/tmp/runtime-emacs
export LIBGL_ALWAYS_SOFTWARE=1