Wineに酔わされた

Introduction

秋葉原でマウスを購入した帰り、ゲームを購入した。ヴィジュアルノベルなものに限らず、たいていのPCゲームでは動作にWindowsを必要とする。しかしながら、Windowsを導入しているPCをあいにく持ちあわせていない。更に運の悪いことに、VirtualBoxはWindows8.1のインストール中に”落ちる”。やっていく気持ちが足りない。残念なことにホストOSとしてWindowsを導入する事は戒律により禁止されている。ドキドキヴィジュアルセックスをするためにはWineを使うしかない。

Wineの導入

# pacman -S wine

Wine on separate user という発想

Wineの導入が完了したこの時点で、Windowsバイナリの実行が可能になったわけだ。しかし、いつも使っているユーザーで実行してしまうと、勝手にhomeディレクトリを弄くられてしまう。実行ユーザーを分離すればいつも使っているhomeディレクトリを弄くられることもないだろう。意外に面倒だったので、備忘録として実行ユーザーの分離を実現するために実行した手順を示す。

目標

Wineに関するすべての作業はwineuserで行うことにする。Wineを介してWindowsバイナリを実行するときは全てwineuserのシェルを通じて実行することにする。setuid?知らない子ですね…

手順

いつも使うユーザーの.bashrcに下記内容を追記。aliasで実行を阻止するとは非常に頭が悪い。

alias wine='echo Use winesh.'
alias winebuild='echo Use winesh.'
alias winedump='echo Use winesh.'
alias winemine='echo Use winesh.'
alias wine-preloader='echo Use winesh.'
alias winecfg='echo Use winesh.'
alias winefile='echo Use winesh.'
alias winepath='echo Use winesh.'
alias wine64='echo Use winesh.'
alias wineconsole='echo Use winesh.'
alias wineg++='echo Use winesh.'
alias wineserver='echo Use winesh.'
alias wine64-preloader='echo Use winesh.'
alias winecpp='echo Use winesh.'
alias winegcc='echo Use winesh.'
alias wineboot='echo Use winesh.'
alias winesh='sudo -u wineuser /usr/bin/bash'

次にX11を使ったアプリケーションがサーバーにちゃんとアクセスできるように.Xauthorityのパーミッションを変更しなくてはならない。シンクライアントではないこのマシン、.Xauthorityがどうせ読まれたところで画面を自由に突かれるだけだし問題なかろう。ACL?知らない子ですね…

$ chmod 644 ~/.Xauthority

ここまでの作業でGUIは出るようになった。しかし、音声は出ない。ALSAがマルチユーザーを想定していない、ゴニョゴニョな状態になってしまっているようだ。デバイスを直接叩くのではなく、dmix経由で音声を出力するように設定を変更する。

/etc/asound.conf

pcm.dmixer {
    type dmix
    ipc_key 1024
    ipc_key_add_uid 0 # multiuserに対応
    ipc_perm 0666

    slave {
        pcm "hw:1,0"
        period_size 1024
        buffer_size 16384
    }

    bindings {
        0 0
        1 1
    }
}

file: ~/.asoundrc
pcm.!default {
    type plug
    slave.pcm "dmixer"
}

ctl.!default {
    type hw
    card 1
}

設定ファイルを読み込む順番のおかげで、各ユーザーのhomeディレクトリにも設定ファイルを作成しなくてはならないというつらみ。これに気づかず1時間ほど時間を無駄にしてしまった。

あとはwineuserをaudioグループに追加すれば終了だ。この作業は ipc_perm で 0666 を指定しているため、もしかすると必要ないのかもしれない。

結果

fixme: “SendASPI32Command”

さらに、「オーディオデバイスロックされとるでw」とか「MIT-MAGIC-COOKIEおかしいでw」とか言われるようになりました。辛いですね。