試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

WineでWindows用スクリーンセーバを実行する

Wineは、Windows用のスクリーンセーバを実行させることもできる。しかし、一定時間経過後、自動的に実行させるという形ではなく、手動で起動させて楽しむという使い方で、動作しないものや不安定なものも結構ある。

実行方法

  • スクリーンセーバの.scrファイルを、Wineの引数にして実行すると、設定ダイアログが出る。
  • スクリーンセーバを動作させるには、スクリーンセーバの後ろに/sというオプションを付ける。

いずれの場合も、${WINEPREFIX}/dosdevices/c:/windows/${WINEPREFIX}/dosdevices/c:/windows/system32/に.scrファイルが配置されていれば、このファイルのパス名を書くことなく、ファイル名のみの指定で実行できる。

$ wine filename.scr /s

ランタイムライブラリを必要とするものに注意

スクリーンセーバに限ったことではないが、環境変数WINEDEBUGの値によっては、VBMFCなどのランタイムが足りないことで異常終了しても、何も表示されずに終了するため、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のバージョンによって挙動が異なる可能性もある。

不安定なもの・動作しないものなど

"水面(みなも)"スクリーンセーバーを実行させると、ある程度は動くのだが、突然固まる。

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

関連記事: