WineでWindows用スクリーンセーバを実行する
Wineは、Windows用のスクリーンセーバを実行させることもできる。しかし、一定時間経過後、自動的に実行させるという形ではなく、手動で起動させて楽しむという使い方で、動作しないものや不安定なものも結構ある。
実行方法
- スクリーンセーバの.scrファイルを、Wineの引数にして実行すると、設定ダイアログが出る。
- スクリーンセーバを動作させるには、スクリーンセーバの後ろに/sというオプションを付ける。
いずれの場合も、${WINEPREFIX}/dosdevices/c:/windows/や${WINEPREFIX}/dosdevices/c:/windows/system32/に.scrファイルが配置されていれば、このファイルのパス名を書くことなく、ファイル名のみの指定で実行できる。
$ wine filename.scr /s
ランタイムライブラリを必要とするものに注意
スクリーンセーバに限ったことではないが、環境変数WINEDEBUGの値によっては、VBやMFCなどのランタイムが足りないことで異常終了しても、何も表示されずに終了するため、WINEDEBUGを外してエラーを見る。
$ env -u WINEDEBUG wine [.scrファイル] /s err:module:import_dll Library MFC42.DLL (which is needed by L"[.scrファイルの場所]") not found
足りないランタイムライブラリはVectorで探すと見つかる。検索エンジン経由でもOK。上の場合、「MFC42.DLL」を探す。
動作を確認したもの
動作すること自体は確認しているが、突然落ちたりすることがないという保証はない。Wineのバージョンによって挙動が異なる可能性もある。
- ゆきやまさんの花火スクリーンセーバー2: 音も出て、出来も結構よい
- GL花火スクリーンセーバー: パターンに関しては乏しいが、見た目は綺麗
- OpenGL Fireworks Screen Saver: 綺麗で音も出る。その音のせいと、上に打ち上がる演出がないことにより、花火というより爆発っぽい印象
- ドミノセーバー: 順番にゆっくりとドミノが倒れていく
不安定なもの・動作しないものなど
"水面(みなも)"スクリーンセーバーを実行させると、ある程度は動くのだが、突然固まる。
9月の雨 (Screen Saver)を実行させると、画面が真っ白になるか、白黒にチカチカする(Wineのバージョンによって異なる)かのどちらか。
「映画ドラえもん25周年」のサイトから入手した映画ドラ25th.scrというスクリーンセーバでは「メモリーが不足しているか、スクリーンセーバーに異常があります。再度インストールし直して下さい。」と出る。公式サイトのバナー画像のようなものはランダムな場所に表示される。
OpenGL Fireworks Screen Saverを実行させているときに、突然落ちたことがある。
$ wine firework.scr /s wine: Unhandled division by zero at address 0x7cf49f50 (thread 0009), starting debugger... Unhandled exception: divide by zero in 32-bit code (0x7cf49f50). Register dump: CS:0023 SS:002b DS:002b ES:002b FS:0063 GS:006b EIP:7cf49f50 ESP:0033f868 EBP:0033f8b0 EFLAGS:00010206( - 00 - RIP1) EAX:00000005 EBX:7cf63284 ECX:0011f060 EDX:00000000 ESI:00000000 EDI:0011f040 Stack dump: 0x0033f868: 0011f05c 00000000 00000000 0033f8e0 0x0033f878: 7da3e168 00008001 0033f970 7da25a10 0x0033f888: 0011f05c 00000001 00000000 7d0ed9b4 0x0033f898: 7d1ffd28 00000000 7cf49f2b 7cf63284 0x0033f8a8: 00000000 00000000 0033f910 7cf5db9f 0x0033f8b8: 0011f040 00000403 00000000 00000001 Backtrace: =>1 0x7cf49f50 ALSA_AddRingMessage+0x30() in winealsa (0x0033f8b0) 2 0x7cf5db9f ALSA_wodMessage+0xd7f() in winealsa (0x0033f910) 3 0x7da2409c MMDRV_Message+0x45c() in winmm (0x0033f970) 4 0x7da32ea8 waveOutReset+0x68() in winmm (0x0033f9a0) 5 0x7d278c61 WAVEMAP_wodMessage+0x7c1() in msacm32 (0x0033fa80) 6 0x7da2409c MMDRV_Message+0x45c() in winmm (0x0033fae0) 7 0x7da32ea8 waveOutReset+0x68() in winmm (0x0033fb10) 8 0x7da306e4 in winmm (+0x206e4) (0x0033fb60) 9 0x7da30a8b PlaySoundA+0x1b() in winmm (0x0033fb70) 10 0x00407926 in firework.scr (+0x7926) (0x00000001) 11 0x00000000 (0x00000000) 0x7cf49f50 ALSA_AddRingMessage+0x30 in winealsa: idivl %esi,%eax Modules: Module Address Debug info Name (78 modules) PE 400000- 771000 Export firework.scr ELF 7bf00000-7bf03000 Deferred <wine-loader> ELF 7ca40000-7ca5f000 Deferred libjpeg.so.62 ELF 7ce2d000-7ce53000 Deferred msacm32<elf> \-PE 7ce30000-7ce53000 \ msacm32 ELF 7ce53000-7cf11000 Deferred libasound.so.2 ELF 7cf1d000-7cf32000 Deferred midimap<elf> \-PE 7cf20000-7cf32000 \ midimap ELF 7cf32000-7cf66000 Export winealsa<elf> \-PE 7cf40000-7cf66000 \ winealsa ELF 7d21d000-7d24f000 Deferred uxtheme<elf> \-PE 7d220000-7d24f000 \ uxtheme ELF 7d24f000-7d254000 Deferred libxfixes.so.3 ELF 7d254000-7d25d000 Deferred libxcursor.so.1 ELF 7d264000-7d27c000 Export msacm32<elf> \-PE 7d270000-7d27c000 \ msacm32 ELF 7d27e000-7d282000 Deferred libxrandr.so.2 ELF 7d282000-7d28a000 Deferred libxrender.so.1 ELF 7d28a000-7d28d000 Deferred libxinerama.so.1 ELF 7d291000-7d2ae000 Deferred imm32<elf> \-PE 7d2a0000-7d2ae000 \ imm32 ELF 7d7ee000-7d87e000 Deferred winex11<elf> \-PE 7d800000-7d87e000 \ winex11 ELF 7d914000-7d933000 Deferred libexpat.so.0 ELF 7d933000-7d95d000 Deferred libfontconfig.so.1 ELF 7d95d000-7d96f000 Deferred libz.so.1 ELF 7d96f000-7d9da000 Deferred libfreetype.so.6 ELF 7d9fb000-7da88000 Export winmm<elf> \-PE 7da10000-7da88000 \ winmm ELF 7dae3000-7daed000 Deferred libgcc_s.so.1 ELF 7dbcf000-7e567000 Deferred libglcore.so.1 ELF 7e567000-7e56c000 Deferred libxdmcp.so.6 ELF 7e56c000-7e56f000 Deferred libxau.so.6 ELF 7e56f000-7e5ea000 Deferred libglu.so.1 ELF 7e5ea000-7e680000 Deferred libgl.so.1 ELF 7e680000-7e76b000 Deferred libx11.so.6 ELF 7e76b000-7e779000 Deferred libxext.so.6 ELF 7e779000-7e790000 Deferred libice.so.6 ELF 7e790000-7e799000 Deferred libsm.so.6 ELF 7e799000-7e818000 Deferred opengl32<elf> \-PE 7e7b0000-7e818000 \ opengl32 ELF 7e818000-7e8d5000 Deferred comctl32<elf> \-PE 7e820000-7e8d5000 \ comctl32 ELF 7e8d5000-7e970000 Deferred oleaut32<elf> \-PE 7e8f0000-7e970000 \ oleaut32 ELF 7e970000-7e982000 Deferred libresolv.so.2 ELF 7e98b000-7e9a1000 Deferred glu32<elf> \-PE 7e990000-7e9a1000 \ glu32 ELF 7e9a3000-7e9c1000 Deferred iphlpapi<elf> \-PE 7e9b0000-7e9c1000 \ iphlpapi ELF 7e9c1000-7ea1a000 Deferred rpcrt4<elf> \-PE 7e9d0000-7ea1a000 \ rpcrt4 ELF 7ea1a000-7eab6000 Deferred ole32<elf> \-PE 7ea30000-7eab6000 \ ole32 ELF 7eab6000-7eafd000 Deferred advapi32<elf> \-PE 7eac0000-7eafd000 \ advapi32 ELF 7eafd000-7eb92000 Deferred gdi32<elf> \-PE 7eb10000-7eb92000 \ gdi32 ELF 7eb92000-7ecce000 Deferred user32<elf> \-PE 7ebb0000-7ecce000 \ user32 ELF 7ecce000-7ecd3000 Deferred euc-jp.so ELF 7edd8000-7eefc000 Deferred kernel32<elf> \-PE 7edf0000-7eefc000 \ kernel32 ELF 7eefc000-7ef06000 Deferred libnss_files.so.2 ELF 7ef06000-7ef1c000 Deferred libnsl.so.1 ELF 7ef1c000-7ef41000 Deferred libm.so.6 ELF 7ef41000-7ef43000 Deferred libnvidia-tls.so.1 ELF 7ef43000-7ef48000 Deferred libxxf86vm.so.1 ELF 7ef48000-7ef62000 Deferred libjis.so ELF 7ef62000-7f000000 Deferred ntdll<elf> \-PE 7ef70000-7f000000 \ ntdll ELF f7d54000-f7d5e000 Deferred libnss_nis.so.2 ELF f7d60000-f7d64000 Deferred libdl.so.2 ELF f7d64000-f7e8a000 Deferred libc.so.6 ELF f7e8a000-f7ea1000 Deferred libpthread.so.0 ELF f7ea8000-f7eb0000 Deferred libnss_compat.so.2 ELF f7ec2000-f7fd6000 Deferred libwine.so.1 ELF f7fd7000-f7ff3000 Deferred ld-linux.so.2 Threads: process tid prio (all id:s are in hex) 0000000a 0000000b 0 00000008 (D) Z:\(中略)\firework.scr 00000016 15 00000009 0 <==
使用したバージョン:
- Wine 0.9.44
関連記事: