気の向くままに辿るIT/ICT/IoT
ハードウェア

Raspberry Pi 400/arm64 Linux/Box86/Box64/WineでWindowsアプリ起動

ホーム前へ次へ
Raspberry Piって?

Raspberry Pi 400/arm64 Linux/Box86/Box64/WineでWindowsアプリ起動

Raspberry Pi 400/arm64 Linux/Box86/Box64/WineでWindowsアプリ起動

2022/09/08

 つい先日、Debian でWine 7.0からのKindle for PC 1.38.0起動・読書してみました。

 恥ずかしながら、当初、Raspberry Pi 400パソコンで何のエミュレーションもなく、さてWine...と作業開始...。

 って、おいおい!x86/x86_64なBSD*/PC-UNIX/Linux/Mac OS XなどmacOS上で使う前提のWineをarm64なラズパイで直接動かそうなんてアホかいなと気づき、amd64なDebianに切り替えたわけです。

 が、QEMUみたいなのがあるんだからarmなラズパイだってできるよね?と思って、ただただ興味本位でやってみた話。

 結論から言うとできました、とりあえず、i386とamd64の、というかwine 32bitとwine 64bitの共存もできました。

 ただ、以前、wineを使った頃は、ホストマシンも32ビットだった為、共存は考えることもなかったですし、情報は限られている模様な上に肝心なところに触れていなかったり、濁していたり、異なっていたりと錯綜しているように見受けられ、何が正解なのか、イマイチわからないのですが、まぁ、できてるので大丈夫でしょう。

 さておき、エミュレーションには、QEMUではなく、より速いんじゃなかろうかという噂のBox86Box64を使うことにしました。

 Box86/Box64って以前、FedoraかなんかにBoxって名前で仮想環境としてなかったっけ?使ったことはないですが、へー、こんなのあるんだって思った記憶があるのですが、気の所為でしょうか。

 QEMUについては、システムエミュレーション機能による仮想化ソフト・仮想マシンとして以前、Windows erからBSD* er/PC-UNIX er/Linux erになるべく、VMWareVirtualBoxVirtual PCと共にあらゆるBSD*/PC-UNIX/Linuxディストロの試用でお世話になったことがありました。

 そんなこんなで今回は、QEMUのもう1つの仮想化技術ユーザーエミュレーションが使えるんじゃないかと思ったことが発端。

 結果、余計なことをせずに一定の手順に沿えば、Box86/Box64、本家WineHQからi386/amd64なWineをダウンロード・インストール、連携して使うまでは超簡単でした。

 一方、前もって覚悟しておくべきは、wineは、全てのWindowsアプリを動かせると言っているわけではなく、実際もそうで、x86(32bit)のアプリは結構動くものがある、x86_64(64bit)は、未知数な感じと思って使う方が健康的であり、温かい気持ちでありがたく使わせて頂くのが正解でしょう。

 また、Windowsアプリによってwineのバージョンや環境が異なる(あれがダメでもこれならとwineバージョンや環境を試してみる)ことも珍しくないようです。

 それがDebianなら、更にstable(安定版)、devel(開発版)、stageing(テスト版)があるわけで。

 とは言え、x86/x86_64ベースのLinux上でもArmなLinux上でも、なんならmacでも、デスクトップ上のアイコンをダブルクリックするだけでWindowsアプリを起動できたりもするわけで、マルチブートはもとより、仮想マシンよりも明らかに手軽なんですから。

Arm64 Raspberry Pi OSなRaspberry Pi 400にBox86/Box64でx86/x86_64用WineからのWindowsアプリ達

Box86/Box64のインストール

 Box86とBox64は、git cloneなりダウンロードなりしてインストールするだけでwineとの連携も、ほぼほぼ考えることも、することもなく、あっけなく完了。

 尚、Box86とBox64の間で相互翻訳はないとのことなので両方ともインストールします。

rpi64bit:~ $ sudo apt install gcc-arm-linux-gnueabihf # installs the cross-compiler toolchain required to build 32 bit ARM code
rpi64bit:~ $ git clone https://github.com/ptitSeb/box86
rpi64bit:~ $ cd box86
rpi64bit:~ $ mkdir build; cd build; cmake .. -DRPI4ARM64=1 -DCMAKE_BUILD_TYPE=RelWithDebInfo
rpi64bit:~ $ make -j2
rpi64bit:~ $ sudo make install
rpi64bit:~ $ sudo systemctl restart systemd-binfmt
rpi64bit:~ $

 Box86については、Debian系ならリポジトリを追加して毎週更新のコンパイル済みバイナリを使うこともできるとのことですが、他のアーキテクチャは、それぞれビルドが必要、同じArm系でも32ビットなラズパイ用Box86のようにcmake/makeでインストールします。

rpi4_64bit:~ $ git clone https://github.com/ptitSeb/box64
rpi4_64bit:~ $ cd box64
rpi4_64bit:~ $ mkdir build; cd build; cmake .. -DRPI4ARM64=1 -DCMAKE_BUILD_TYPE=RelWithDebInfo
rpi4_64bit:~ $ make -j4
rpi4_64bit:~ $ sudo make install
rpi4_64bit:~ $ sudo systemctl restart systemd-binfmt
rpi4_64bit:~ $

 Box64もDebian系のコンパイル済みバイナリの他、64ビットなRaspberry Pi 4用Box64も同様にcmake/makeでインストールします。

 Box86/Box64共にインストール後、sudo systemctl restart systemd-binfmtすることでwineとの連携をとれるようです。

 なぜ、Box86には、gcc-arm-linux-gnueabihfが必要で、Box64に不要なのかは謎。

 また、なぜ、Box64では、sudo systemctl restart systemd-binfmtは「初回インストールの場合は」と明示してあるのかも謎...確かになぜかBox86というかwine winbootが通らない時、systemd-binfmtを再起動すると通ったりしたが...。

 make -j2や-j4は、ビルドに使うCPUコア・スレッド数で、実装の倍までは...なんて話もあり、C++なので多少時間はかかるものの、ここは、あまり無理をせず、少なめな設定が吉かも。

 ちなみにBox86/Box64含め、多くのRaspberry Pi用のアプリを自動インストール/アンインストールしてくれるPi-Appsなるものもあり、Pi-Appsのインストール/アンインストールも簡単ですし、使い方は説明不要レベルで簡単です。

任意のバージョンのi386/amd64なwineをダウンロード/インストール

 Raspberry Pi 400には、Debian派生の標準のRaspberry Pi OS bullseyeを入れたのでWineHQからi386amd64のstable 7.0.0.0版wineをダウンロードし、インストール。

 wineのインストールについては、

 Box86でi386とBox64でamd64によるwineの併用については、

 を参考にしました。

 ただ、併用のページは、wineのi386とamd64の中身をがっちゃんこしちゃってるのですが、そうするとうまくいかなかったので分けて展開・保存しました。

 というわけで今回は、stableな最新バージョン7.0.0.0を選択(stableなどの版の後に-i386や-amd64があるのとないの2つ必要らしいです)。

rpi64bit:~ $ cd path/to/any
rpi64bit:~ $ wget https://dl.winehq.org/wine-builds/debian/dists/bullseye/main/binary-i386/wine-stable-i386_7.0.0.0~bullseye-1_i386.deb
rpi64bit:~ $ wget https://dl.winehq.org/wine-builds/debian/dists/bullseye/main/binary-i386/wine-stable_7.0.0.0~bullseye-1_i386.deb
rpi64bit:~ $ dpkg-deb -xv wine-stable-i386_7.0.0.0~bullseye-1_i386.deb wine-installer
rpi64bit:~ $ dpkg-deb -xv wine-stable_7.0.0.0~bullseye-1_i386.deb wine-installer
rpi64bit:~ $ mkdir wine_stable_i386_bullseye_7.0.0.0
rpi64bit:~ $ cp -r wine-installer/opt/wine-stable/* wine_stable_i386_bullseye_7.0.0.0/
rpi64bit:~ $ ls wine_stable_i386_bullseye_7.0.0.0/
bin lib share
rpi64bit:~ $ rm -rf wine-installer
rpi64bit:~ $

 i386(x86)なwineはこんな感じでダウンロード・展開、後始末。

rpi64bit:~ $ cd path/to/any
rpi64bit:~ $ wget https://dl.winehq.org/wine-builds/debian/dists/bullseye/main/binary-amd64/wine-stable-amd64_7.0.0.0~bullseye-1_amd64.deb
rpi64bit:~ $ wget https://dl.winehq.org/wine-builds/debian/dists/bullseye/main/binary-amd64/wine-stable_7.0.0.0~bullseye-1_amd64.deb
rpi64bit:~ $ dpkg-deb -xv wine-stable-amd64_7.0.0.0~bullseye-1_amd64.deb wine-installer
rpi64bit:~ $ dpkg-deb -xv wine-stable_7.0.0.0~bullseye-1_amd64.deb wine-installer
rpi64bit:~ $ mkdir wine_stable_amd64_bullseye_7.0.0.0
rpi64bit:~ $ cp -r wine-installer/opt/wine-stable/* wine_stable_amd64_bullseye_7.0.0.0/
rpi64bit:~ $ ls wine_stable_amd64_bullseye_7.0.0.0/
bin lib64 share
rpi64bit:~ $ rm -rf wine-installer
rpi64bit:~ $

 amd64(x86_64)なwineはこんな感じでダウンロード・展開、後始末。

rpi64bit:~ $ rm ~/path/to/any/*.deb
rpi64bit:~ $

 ダウンロードした.debファイルも不要なら削除しておきます。

rpi64bit:~ $ sudo ln -s ~/path/to/any/wine_stable_i386_bullseye_7.0.0.0/bin/wine /usr/local/bin/wine
rpi64bit:~ $ sudo ln -s ~/path/to/any/wine_stable_i386_bullseye_7.0.0.0/bin/wineboot /usr/local/bin/wineboot
rpi64bit:~ $ sudo ln -s ~/path/to/any/wine_stable_i386_bullseye_7.0.0.0/bin/winecfg /usr/local/bin/winecfg
rpi64bit:~ $ sudo ln -s ~/path/to/any/wine_stable_i386_bullseye_7.0.0.0/bin/wineserver /usr/local/bin/wineserver
rpi64bit:~ $ sudo ln -s ~/path/to/any/wine_stable_amd64_bullseye_7.0.0.0/bin/wineserver /usr/local/bin/wineserver
rpi64bit:~ $ sudo ln -s ~/path/to/any/wine_stable_amd64_bullseye_7.0.0.0/bin/wine64 /usr/local/bin/wine64
rpi64bit:~ $

 ここで/usr/local/binにシムリンクを張ります。

 ~/、または、フルパス指定しないと正常にリンクを張れないので注意。

 たぶん、これで良いんだと思いますが、wine64はamd64から、それ以外のwine/wineboot/winecfg/wineserverは、i386から。

 とは言え、diffで比較してみるとバイナリのwineとwine64は当然、また、wineserverも異なりますが、wineboot/winecfgは、i386でもamd64でも中身は変わらないので、どちらでも良さげです。

2022/10/05
[訂正]

 wineserverも64bit(amd64のもの)にしておかないとwine64実行時などにエラーになることが判明。

 尚、これを64bit版にしてもwine(32bit)は正常に機能します。

[注意]

 こんなミスをする人は稀有かもしれませんが、i386(32bit)とamd64(64bit)のWineを共存させる場合、双方のwineバージョンは一致させること。

 自身の場合、いろいろ、試してみていたら、いくつか設定ミスをしていて、その1つとしてバージョン違いを入れてしまっていました。

 他にも要因はあるかもしれませんが、共存させる際に32bitと64bitのwineバージョンが不一致の場合やps aux | grep wineなどとして重複実行されている場合などには、以下のようなエラーに遭遇することがあります。

[wine client error:0: version mismatch ***/***]
[Your wineserver binary was not upgraded correctly,]
[or you have an older one somewhere in your PATH.]
[Or maybe the wrong wineserver is still running?]
[アプリケーションを開始できません。もしくは、指定したファイルにアプリケーションが関連付けられていません。]
[ShellExecuteEx が失敗: 内部エラーです。]

wineとwine64を使い分ける

rpi64bit:~ $ vi ~/.bashrc
...
alias wine64="WINEPREFIX=~/.wine64 wine64"
...
rpi64bit:~ $ source ~/.bashrc
rpi64bit:~ $

 wineの時、Windows関連のルートとなるディレクトリは、任意で作成できますが、デフォルトは~/.wineであり、WINEPREFIXのデフォルトも同様、他方、wine64の時は、別のディレクトリとして~/.wine64としておくべく、aliasで別名として指定しておきます。

 デフォルトを変更する方法もあるようですが、そうでない場合、別途指定したい時は、端末上などでWINEPREFIX=で都度ディレクトリを指定したものを前置するか、このように~/.bashrcなどに追記しておく必要があるでしょう。

 これでwineとwine64を使い分けることができるようになります。

rpi64bit:~ $ wine --version
wine 7.0
rpi64bit:~ $ wine64 --version
wine 7.0
rpi64bit:~ $ winecfg
...
rpi64bit:~ $ wine64 winecfg
...

 この時点で端末でwine --version/wine64 --versionとすればバージョンが、wincfgとすれば、GUIのWine設定画面が表示されます。

2022/10/05

 他の方法やタイミングでも同様になることもあるようですが、Wineを使う前に32bitをwine、64bitをwine64とし、後者では先のように~/.bashrcで設定しておいた場合、それぞれ、このようにしてwinecfgを実行すると~/.wine、~/.wine64を作成・更新してくれます。

rpi64bit:~ $ vi ~/.bashrc
...
alias wine64="WINEPREFIX=~/.wine64 wine64"
export BOX86_NOBANNER=1
...
rpi64bit:~ $ source ~/.bashrc
rpi64bit:~ $

 尚、Box86関連の印字を非表示にしたい場合には、端末でBOX86_NOBANNER=1の後半角スペースをおいてwine --versionなどとするか、~/.bashrcなどでこれをexport、source ~/.bashrcすれば、OK。

 よってwine64のaliasと併せるとこんな感じになります。

 また、後述のようにwinetricksはもちろんのこと、wine/wine64でWindowsアプリを起動することもできます。

 その過程でwineで必要となった場合に.NETの代替Mono、インターネットエクスプローラ関連で使われるGeckoのインストールを促されるので今行った操作を滞りなく実行するためにも以後のためにもインストールしておくのが賢明です。

 Arch Linuxなどには、wine用のMonoやGeckoをリポジトリから取得できるような情報もあるようですが、Raspberry Pi OSやDebianにはないので。

 と言ってもWineHQにあるのですが、場所が違うのか、(PCのDebianにはない一方、)なぜか、Raspberry Pi OSにおいては、いつの間にかできていた/usr/share/wine/mono、/usr/share/wine/gecko以下に配置してみても効果はないみたい?でした。

winetricks

 winetricksは、GUIパネルからWindowsのdllやアプリ、フォントのインストールなどの他、winecfgを実行したり、レジストリエディタを開くことができたりする、wineを使う上で、とても便利なツールです。

 が、残念なことにwinetricksは、32bit版のみで64bit版は現時点では存在しないようです。

 これもwine 32/wine 64を共存させるにあたり、wine64とwineserver以外をwine 32にした理由の1つです。

rpi64bit:~ $ cd path/to/any
rpi64bit:~ $ wget https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks
rpi64bit:~ $ chmod +x winetricks
rpi64bit:~ $
rpi64bit:~ $ sudo ln -s ~/path/to/any/winetricks /usr/local/bin/winetricks
rpi64bit:~ $
rpi64bit:~ $ winetricks
...

 Winetricks/Wiki WineHQにあるようにダウンロードとインストールは簡単で設定もCLIでもGUIでも可能です。

 インストールというか展開、/usr/local/binへのシムリンクが完了したら、端末から単にwinetricksとして初期画面のメニューの他、[Select the default wineprefix]を選択すれば、更にいろいろなことができるようになっています。

 フォントは、英語系には?corefonts、日本語には、fakejapanese系やcjkfonts、takaoあたりが良さそうです(が、設定後、GUI上には設定が反映されない?ことがあったりしてできたのやらできていないのやら、化けなくなるので効いているのでしょうが)。

 前述のように、BOX86_NOBANNER=1を指定すれば、Box86関連の印字を非表示にすることもできます。

 ちなみにwinetricksは、リポジトリにもあったりすると思いますが、依存関係としてリポジトリ内のwineもインストールされてしまうので、このようにダウンロードしてくるのが賢明でしょう。

64bitホスト上で32bit Wine用アプリをapt installする場合

rpi64bit:~ $ sudo dpkg --add-architecture armhf
rpi64bit:~ $ sudo apt update
rpi64bit:~ $

 もし、Raspberry Pi 4/400かつ、Raspberry Pi OS 64bit上でWine 32bit用にRaspberry Pi OS上のパッケージ管理システムを使ってパッケージを追加したい場合には、Arm系の32bit版アーキテクチャであるarmhfを追加してリポジトリリストをアップデートしておき、インストールする際は、パッケージ名:armhfとします。

 Raspberry Pi 4/400かつ、Raspberry Pi OS 64bitの場合、アーキテクチャはarmであり、32bit用はarmhfなのでこうなります(が、x86_64系のamd64ホスト上の場合にはi386とします)。

IrfanView/Notepad++他のインストールと試行

 wineにプリインストールされたアプリの内、試してみたファイラーExplorer(explorer.exe)、Internet Explorer(iexplore.exe)、WordPad(wordpad.exe)は、wine(~/.wine/drive_c/内にあるアプリ)、wine64(~/.wine64/drive_c/内にあるアプリ)共に起動しましたが、Windows Media Player(wmplayer.exe)は何れも起動しませんでした。

 また、窓の杜から任意に選んだ32bit版/64bit版Notepad++ 8.4.6Windows時代に数少ない好んで使っていたアプリの内、32bit版IrfanView v4.60はインストーラによるインストール及び起動、使用することができました。

 もちろん、アイコンをダブルクリックするのではなく、端末から[wine *.exe]、[wine64 *.exe]などとして実行。

2022/10/05

 気づきませんでしたが、窓の杜にIrfanView日本語化モジュールを発見、ダウンロード、wine path/to/irfanview_lang_japanese.exeとしてインストール後、IrfanViewを起動、[Options(O)] => [Language(L)]で[日本語(Yu Gothic UI)]か[日本語(Meiryo UI)]いずれかを選択、[OK]で日本語にもなりました。

 他方、64bit版が起動できないので入れてませんが、32bit版にはなく、64bit版のみ、なんと、「動画やMP3などを再生するプラグイン集」Irfanview Pluginsまである...進化してる...やるなー。

 一方、64bit版IrfanView v4.60も試したところ、インストーラによるインストールはでき、メニューにもWineアプリとして登録されたものの、起動、使用することはできず、ラズパイの純粋な端末から起動させても特段エラーもなく、さらっとプロンプトが返ってきたので原因不明。

Arm64 Raspberry Pi OSなRaspberry Pi 400にBox86/Box64でx86/x86_64用Wine 7からKindle for PC 1.38.0のAmazonログイン画面までは出たが...

 wineを改めて使うきっかけとなったKindle for PC 1.38.0(インストーラーは1.38.65290)も試してみましたが、wine(32bit)では、Kindle画面が出そう、または、Amazonログイン画面が出た、Amazonログイン画面が出そうなところで応答なし、wine64は64bit版IrfanViewと同じ感じで起動できず。

2022/10/05

 ちなみにKindleでWine C++ Runtime LibraryというタイトルでRuntime error!などとポップアップ表示される場合は、端末で次のようにディレクトリを作成してから、実行し直すといける場合があります。

$ mkdir -p ~/.wine/drive_c/Program\ Files \(x86\)/Amazon/Kindle

 試してはいませんが、Kindleは2017年頃らしきものがwinetricksの[install an application]から選択できるようにはなっているので過去には動いたのかも?というか、冒頭リンク先のようにPC/Debian上のWine 7ではインストール・登録・読書できているので、逆になぜできないのか、ちょっとした環境調整でできるものなのか。

 尤もKindleは、タッチパネルでもない限り、マウスパッド付きのメインで使っている|たノートPCの方が断然読みやすいので、ディスプレイが、そうでないラズパイパソコンでできる必要はなく、良いんですけどね。

 さて32bitのアプリは、winetricksのおかげでフォントなどもインストールでき、文字化けも解消しますが、対応していない64bit版は、どうすれば...、他から持ってきて~/.wine64内の然るべき場所に保存すればよい?、というか、64bit版にも影響しているのか、デフォルトで持っているのか、日本語は化けてないのにアルファベットが文字化けしてたり...。

2022/10/05

 検証の過程でWindows上でないとディスクを検出できない模様ながら、32/64bit両対応らしきシステム情報表示のCrystalDiskInfo 8.17.7、Linux上で使えるのか不明の多機能ファイル検索のEverything 1.3.1.1021.x64もインストールできました。

 ちなみにCrystalDiskMarkは、インストールでき、 システムディスクは認識する一方、USBデバイスなどは認識せず、これのLinux版と思しきKDiskMarkとは結果が大きく異なったのでWindowsでないと正しく計測できない模様。

2022/10/18

 Wine 5.0.2(7.0.0のはずが...)でArduino IDE 2.0.0...と思いましたが、残念ながら、Arduino IDE Downloadsにある[Windows Win 10 and newer,64bits]、[Windows MSI Installer]、[Windows ZIP file]の内、2つめはインストーラ自体起動できず、1つめの.exeである[Windows Win 10 and newer,64bits]はインストーラが起動し、インストールまではできたものの、3つめのzipファイルも、Arduino IDEを起動させることができませんでした。

SoftEther VPN Server Manager for Windowsをインストール

2022/10/02

 Wine 5.0.2(7.0.0のはずが...)でWindows用SoftEther VPN Server Managerをインストールしてみました。

 ほかはLinux上で設定も、その部分についてはvpncmdでできるのかできないのかすらわからず、Raspberry Pi 2BとスマホによるSoftEther/OpenVPN互換でVPNでは、若干苦々しい思いで仮想マシン上のWindows 10にインストールしてtapデバイスを設定したのですが、ふとwineでもできるんじゃないかと。

arm64 Raspberry Pi OSなRaspberry Pi 400のwineで起動したSoftEther VPN Setup Wizard

 SoftEther VPNダウンロードセンターで[SoftEther VPN Server Manager fot Windows]をダウンロードしてきたわけですが、よく見ると[CPU]の唯一の選択肢には、[Intel (x86 and x64)]と表記がありました。

 へー、と冗談半分に、wine(32)とwine(64)でやってみたら、さすがand、どっちも文字化けすることもなく、SoftEther VPN Setup Wizard(Version 4.39.9772)が起動、

arm64 Raspberry Pi OSなRaspberry Pi 400のwineで起動したSoftEther VPN Setup WizardでSoftEther VPN Server Manager for Windowsを選択

 [SoftEther VPN Server Manager(Admin Tools Only)]を選択、

arm64 Raspberry Pi OSなRaspberry Pi 400のwineでインストールしたWindows用SoftEther VPN Server Manager

 というわけで今更なWineバージョン5.0.2でSoftEther VPN Server Managerをインストール・起動できました。

WinMergeをインストール

2022/10/02
arm64 Raspberry Pi OSなRaspberry Pi 400のwineでインストールしたWinMerge

 続いてWine 5.0.2(7.0.0のはずが...)でWinMerge 32bitもインストール・起動できました。

 プレーンテキストファイル間だけでなく、画像やバイナリファイル、Excel、また、フォルダ間も(ディレクトリ間も?)比較もでき、3つ同時比較の3方向マージ機能なんかもあるらしく面白そうだったので。

 これまで大丈夫だったのに、なぜか、インストーラー時点で文字化けしたのでunifonts?とcjkfontsを入れてみたら、最後のボックス内の英文が化けたほかは、解消しました。

備考

 Raspberry Pi 3B+含む以前のラズパイでは、カーネルの関係で、もう1手間2手間あったようですが、Raspberry Pi 400だったので楽ちん。

 また、Raspberry Pi 400だからでしょう、ラズパイ/Raspberry Pi OS 64bit上のBox86/Box64、Box86/Box64上のWine、Wine上のWindowsアプリ、試してみたら、起動には若干時間がかかるものの、起動してしまえば、USB 2.0なUSBメモリですら、ほぼほぼ快適、ホントはSSDなのでネイティブアプリと遜色もなく、超快適です。

 若干、CPUのクロック周波数は低いながらもRaspberry Pi 4でも快適でしょう。

ホーム前へ次へ