Linux

Diablo環境色々 – Wine on Windows10(X+WSL2)編

もう完全に色々な環境で動かして見るための題材になりつつあるDiablo2。Windowsでいじるときのネックはレジストリなどの環境が分離できないこと。なのでアプリ1つが環境全体に及ぼす影響が大きい。Linuxでは最近では色々な形式はあれどSandbox化されてきていていい感じにアプリを利用できる。例えばLinuxではWineを利用すると環境をアプリ単位で切り替えて利用することができる(正確にはファイルシステムとレジストリが分離できる、まぁDockerと同じようなもんだ<乱暴)

ふと思った「Windows10にVirtualboxとか入れていたけどよく考えたらX-Windows+Wineで環境きれいに利用できるやん!」そしてDiablo2はレガシーなアプリなので32BitのXPで動くような枯れた素材。

Diablo(sw renderng) on WLS2 with X (Windows10)

結論からいえば動く、音は設定してないので出てないが一応は遊べそうな感じがする。DirectDrawも glide-3dfxとソフトウェアレンダリングも動いている

WineHQの導入

今回は普段利用しているWSLのUbuntu環境を利用しています。Winehqから新しいバージョンを入れて利用をしてみます。今回は最低限が動けばいので設定等は行いません。

sudo dpkg --add-architecture i386
wget -nc https://dl.winehq.org/wine-builds/winehq.key
sudo apt-key add winehq.key
sudo add-apt-repository 'deb https://dl.winehq.org/wine-builds/ubuntu/ focal main'
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys DFA175A75104960E
sudo apt update
sudo apt install --install-recommends winehq-stable

これで入ると思います。入らない場合には公式サイトを見てもらればなんとかなるはずす。WSLの環境にはWineは既存で入っていないと思いますがある場合には消してから始めます。

環境構築

Wineは環境変数で環境を分けることができるので基本的はPREFIXをつけて動かすほうが良いです。単一環境で複数のアプリを入れることのメリットは少ないので常にクリーンな状態で動かす事が望ましいです。

WINEARCH=win32 WINEPREFIX=~/.wine_w32  wineboot

アプリの導入

Windowsの本体側にイメージがおいてある前提ですが、Windows側でマウントするとDドライブのように新しいドライブレターでマウントされた際には以下のコマンドでWSL上から利用できるようにします。

<strong>mount -t drvfs d: /mnt/d

便利ですね。逆は難しいですがWSLからは簡単にできるようになってきています。

X-Windowサーバの導入

なにはなくともXが必要です。VcXsrvというソフトがあるので使ってみました。他にもたくさんあるので好きなものを選べばよいかともいます。設定する際に以下のオプションを入れています(どこかのサイトに書いてあったので)

いくつか設定をしておきます。

WSL側でWindowsのフォントを見るために /etc/fonts/fonts.conf に以下のようにWindowsディレクティブを追加しておきます。

<dir>/mnt/c/Windows/Fonts</dir>
<dir>/usr/share/fonts</dir>
<dir>/usr/local/share/fonts</dir>
<dir prefix="xdg">fonts</dir>
<!-- the following element will be removed in the future -->
<dir>~/.fonts</dir>

これで winecfg で豆腐にならないです。変更をしたら以下のコマンドでキャッシュを更新しておきます。

sudo fc-cache -fv

Winecfgでの設定は2箇所で、アプリをXPにすること。以下のようにDirectDraawをオーバーライドしておくこと。これをしておかないとWineに付属のものが利用されて動かない

実際に起動する際には以下のようにする

export DISPLAY=192.168.0.1:0
WINEARCH=win32 WINEPREFIX=~/.wine_w32 winecfg

アプリケーションの設定

メインのDiablo2の設定は特に特別なことはない、普通に動く。いつものようにシングル向けに 1.12 で導入して 1.13dにアップグレードしてから https://github.com/whipowill/d2-plugy-qol を入れている。

起動時に -3dfx とつけると glide-3dfx で起動、 -w だとソフトウェアレンダリング、 無指定だとDirectDrawになる。(正しく設定が反映されているかは起動後に /fps チャットコマンドで表示されるので確認ができる)

それ以外は普段のDiabloの設定と同様に行うことができる。レジストリへの変更も同じように regedit を利用することができるので特に問題はないだろう。

まとめ

Chromebookのようなこねくり回した部分はなくてWSLとXは素直な関係のようだ(現在は特にOS側がサポートしているわけでもないので当然だが)。最近のMS方向性はまさに今回のようなWSLを利用、アナウンスではXアプリケーションも動くとのことだ、今更X動かしてどうするんだよって思ったけど動いて嬉しかったのでWindows10の機能拡張を楽しみに待つことにする。記事を読むとWaylandをネイティブでサポートするらしいので期待

Windowsがもっと構成ファイル(レジストリ)とかを汚さないで動いてくれればいい気もするのだけど仮想環境を作るほどでもないというものはWineのような手段も取れるといういいお試しになった。

接続先はいつものプライベートサーバ

Macbook 1,1 に rEFInd を導入する

Ubuntuの導入したときに UEFIブートになっておらず BIOS ブート位なっていたのですがようやく UEFIにすることが出来ました。Macbookは、EFI領域がなくBIOSブートの領域だけでもBootManagerが起動してくれるので問題はないのですが非常に時間がかかります(大体20-30秒前後)

rEFindの導入

今回パーティション構成は次のようになっています。

Disk /dev/sda: 234441648 sectors, 111.8 GiB
Model: CHN 25SATAA3 120
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 5B9C2F29-F02D-4A76-B09A-1E8E1DEAF557
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 234441614
Partitions will be aligned on 2048-sector boundaries
Total free space is 2925 sectors (1.4 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048          249855   121.0 MiB   EF00  
   2          249856       234440703   111.7 GiB   8300  

UEFIのソフトウェアは rEFnd を利用します。

  • rEFind をこちらからダウンロード
  • ドネーションウェアになっていますが無料でダウンロードできます。
  • 解凍後 sudo ./refind-install を実施します。

設定の確認

今回の場合には /dev/sda1 に導入したファイルが入っています。これを /boot/efi にマウントし確認することが出来ます。

$ sudo -i
$ mount /dev/sda1 /boot/efi
$ ls -l /boot/efi/EFI/BOOT
合計 640
drwxr-xr-x 2 root root    512 12月  1 23:39 drivers_ia32
drwxr-xr-x 3 root root   6144 12月  1 23:39 icons
drwxr-xr-x 2 root root   1536 12月  1 23:39 keys
-rwxr-xr-x 1 root root    136 12月  1 23:39 BOOT.CSV
-rwxr-xr-x 1 root root 202624 12月  1 23:39 bootaa64.efi
-rwxr-xr-x 1 root root 201600 12月  1 23:39 bootia32.efi
-rwxr-xr-x 1 root root 208776 12月  1 23:39 bootx64.efi
-rwxr-xr-x 1 root root  32029 12月  2 22:32 refind.conf
  • Macbookは、この bootia32.efi を利用して起動してきます。
  • refind.conf が設定ファイルになっています。

  • 標準では上記のような感じで動きます。Macbookの場合には、option を押しながら起動した場合ブートソフトウェアを選択することが出来ます。その後こちらのブートマネージャーを起動することが出来ます。
  • refind.conf に定義している起動設定や自動で検索し発見された設定が表示されます。

grubとの関係性

  • grubは、BIOSブートで起動後にシステムを起動することが出来るブートマネージャーです。
  • Kernelに対して様々な設定を与えて起動することが出来ます。
  • grub-efi という機能は grubxxxxx.efi というEFI経由で起動するブートマネージャーでEFIからgrubの設定ファイルを利用して起動することが出来ます。
  • rEFind経由で grubxxx.efiがない場合でもレガシーブートという項目でBIOSブートを行うことが出来ますのでその際にはdiskにgrubが導入されていれば通常のBIOSブート同様の画面が表示されます。

refind.confの設定

メインで起動させる Ubuntu を追加します。

menuentry Ubuntu {
    icon EFI/BOOT/themes/tux-refind-theme/icons/os_ubuntu_original.png
    volume 0f0adafd-53a4-4915-a5e7-cd0f34493d34
    loader /boot/vmlinuz-4.15.0-39-generic
    initrd /boot/initrd.img-4.15.0-39-generic
    options "ro root=UUID=a16fd3ad-0ea8-4f95-9ccf-74a46189985b text nomodeset"
    #disabled
}
  • Volume は、sudo blkid /dev/sda2 を実施した結果の PARTUUID を指定します。
  • loader, initrd は /boot 以下のファイルを指定します
  • optionでは grubなどで指定している項目同様の指定です。
  • Macbook1,1ではそのまま起動すると残念ながらディスプレイドライバの都合なのか画面が崩れて起動できません。Grubではその設定を回避するために # insmod gfxterm とコメントアウトして対応をしていました。またその際には nomodeset で起動すると解像度が 1024×768しか選択できず思う解像度が出なかったため利用してませんでしたが UEFIブートでは問題なく利用できたのでオプションを ro text nomodeset を追加しています。
  • timeout 1、起動の待ち時間
  • scanfor manual,optical,hdbios,biosexternal、検索対象の絞り込み
  • default_selection “Ubuntu”、ディフォルト起動ディスクの選択
  • include themes/tux-refind-theme/theme.conf、テーマファイルの読み込み
  • legaacyfirst、アイコンの順序

まとめ

起動時間が圧倒的に短縮しました。ブートマネージャーが小奇麗になりさらに起動が早くなり満足です。
実は当初 grub-efiを利用しようと思っていたのですが grubがコンパイルできず諦めました。

Ubuntu on MacBook 2006 への道は険しい(2)

Ubuntu on MacBook 2006 への道は険しい

  • Window-Manaerに LXCD フレーバーを選択しています。(sudo apt install -y lubuntu-desktop
  • アイコンは懐かしのBeOSアイコン(一周回ってここに来た感じ)
  • 複数起動しなければ速度的には耐えられるかんじ。
  • SSDにしたら劇的に変わるのかはちょっと謎(試してみて行きもするがもう一度セットアップするのも面倒。同じ容量のSSDは買う気が起きない。)
  • macOSにおけるバックアップと似た感じのものは timeshift というものがあるが実際のリストアまではまだ確認できていない。
  • AWS Workspacesは起動できるようになったので仕事では便利(ただ日本語入力切り替えがキーボードから出来ない)
  • Terminalアプリは Guake というアプリが便利(F12キーで上からスルスルって降りてくる。Ctl+矢印キーでサイズも簡単に変更できて楽ちん)
  • Touchpadの設定は Touchpad Indicator でGUIから簡単に設定
  • Bluetooth経由でマウスも利用可能な事を確認
  • 日本語キー入力がたまに意図しない確定があるが概ね良好
  • オフィスはGoogle Docsを利用しておりローカルアプリは利用してないが全く不便していない。むしろブラウザのみ動けばいいので軽い。
  • 本体が古いのでディスプレイがぼやけている。あと白が飛んでいる感じ

udevのイベントの確認

相変わらず Macbookのマウスを指したり抜いたりした際のtouchpadの有効無効がうまく行かないケースがある。
設定など見てもおかしいところがなくいつの間にか動いていたりするので原因がわからない。そもそも有効無効には以下のコマンドを利用するのだが単純に打っても有効にならないときがあるのでお手上げ。

udevイベントの発生の確認

❯❯❯ udevadm monitor
monitor will print the received events for:
UDEV - the event which udev sends out after rule processing
KERNEL - the kernel uevent

KERNEL[1430.388672] remove   /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1:1.0/0003:045E:0797.000D/input/input23/mouse0 (input)
UDEV  [1430.405002] remove   /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1:1.0/0003:045E:0797.000D/input/input23/mouse0 (input)
KERNEL[1430.412388] remove   /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1:1.0/0003:045E:0797.000D/input/input23/event5 (input)
UDEV  [1430.415354] remove   /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1:1.0/0003:045E:0797.000D/input/input23/event5 (input)
KERNEL[1430.428202] remove   /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1:1.0/0003:045E:0797.000D/input/input23 (input)
KERNEL[1430.429470] remove   /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1:1.0/0003:045E:0797.000D/hidraw/hidraw0 (hidraw)
KERNEL[1430.429516] unbind   /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1:1.0/0003:045E:0797.000D (hid)
KERNEL[1430.429556] remove   /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1:1.0/0003:045E:0797.000D (hid)
KERNEL[1430.429677] unbind   /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1:1.0 (usb)
KERNEL[1430.429828] remove   /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1:1.0 (usb)
UDEV  [1430.432792] remove   /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1:1.0/0003:045E:0797.000D/input/input23 (input)
UDEV  [1430.433463] remove   /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1:1.0/0003:045E:0797.000D/hidraw/hidraw0 (hidraw)

このイベントを拾って自動的にスクリプトを動かすことが出来ます。設定は /etc/udev/rules.d 以下に

❯❯❯ more 01-touchpad.rules
SUBSYSTEM=="input", KERNEL=="mouse[0-9]", ACTION=="add", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/home/hideaki/.Xauthority", RUN+="/usr/bin/synclient TouchpadOff=
1"
SUBSYSTEM=="input", KERNEL=="mouse[0-9]", ACTION=="remove", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/home/hideaki/.Xauthority", RUN+="/usr/bin/synclient TouchpadO
ff=0"

これで抜き差しすると /usr/bin/synclient TouchPadOff= というコマンドが実行されることになります。
この結果はsystemdで起動させれている systemd-udevdのログで確認できます。

❯❯❯ systemctl status systemd-udevd
● systemd-udevd.service - udev Kernel Device Manager
   Loaded: loaded (/lib/systemd/system/systemd-udevd.service; static; vendor preset: enabled)
   Active: active (running) since Fri 2018-10-19 06:52:07 JST; 27min ago
     Docs: man:systemd-udevd.service(8)
           man:udev(7)
 Main PID: 325 (systemd-udevd)
   Status: "Processing with 12 children at max"
    Tasks: 1
   CGroup: /system.slice/systemd-udevd.service
           └─325 /lib/systemd/systemd-udevd

ジャーナルコマンドのログで確認できるので見てみると結構失敗しています。

10月 19 06:54:25 child systemd-udevd[442]: Process '/usr/bin/synclient TouchpadOff=1' failed with exit code 1.
10月 19 06:54:25 child systemd-udevd[439]: Process '/usr/bin/synclient TouchpadOff=1' failed with exit code 1.

が、突然動き始めるのでその現任は不明です。。。

Ubuntu メモリ圧縮 zswap で少ないメモリを何とかする

いま使っているMacbook2,1は最大搭載量が2Gといういまだとかなり格安ノートでも備えている容量しか持っていません。
実際問題ブラウジングしてすこしプログラム書いてという程度であれば実際十分なのですがそれでもたまに固まります(スワップしている)

❯❯❯ free
              total        used        free      shared  buff/cache   available
Mem:        2028328     1045384      115460      174816      867484      890260
Swap:       2063356           0     2063356

という状況なので zswap を有効にしてみます。

zswap とは、仮想メモリ圧縮(英語版)を実現する Linux カーネルの機能で、スワップされたページを圧縮されたライトバックキャッシュ上に保持する。メモリページ(英語版)がスワップアウトされる際にスワップデバイス上に移動させるのではなく、システム RAM 上に動的に確保されるメモリプール(英語版)内に圧縮して保存する。実スワップデバイスへのライトバックは延期されるか完全に回避されるので、スワップが必要とされる Linux システム上の I/O を大きく低減させることができる。トレードオフとして、圧縮を実行するために CPU サイクルの消費は増加する – https://ja.wikipedia.org/wiki/Zswap

すでに今回のUbuntu18.04(32bit)ではカーネル上は利用可能になっています。

❯❯❯ cat /boot/config-`uname -r` | grep -i zswap
CONFIG_ZSWAP=y

設定としてカーネルモジュールの設定をします。

$ sudo sh -c "echo lz4 >> /etc/initramfs-tools/modules"
$ sudo sh -c "echo lz4_compress >> /etc/initramfs-tools/modules"
$ sudo /usr/sbin/update-initramfs -u

Grubの起動パラメータと、/etc/default/grunbに以下を追記しています。

GRUB_CMDLINE_LINUX_DEFAULT="text zswap.enabled=1 zswap.compressor=lz4"

これで再起動すれば利用可能になります。

❯❯❯ cat /sys/module/zswap/parameters/enabled
Y
❯❯❯ journalctl -k | grep -i zswap
 6月 21 07:24:10 child kernel: Kernel command line: BOOT_IMAGE=/boot/vmlinuz-4.17.2-041702-generic root=UUID=22564c24-a485-4cc2-9fd8-af65d431da9d ro text zswap.enabled=1 zswap.compressor=lz4
 6月 21 07:24:10 child kernel: zswap: loaded using pool lz4/zbud

入れたからと言って急にメモリが増えるわけでもないし挙動が早くなるわけではないですがメモリ不足で急激に落ちるというようなことはなくなったような気がします。おまじない程度で。

上部へスクロール