Hello all,
Perhaps this was asked before, but I didn't find the answer. Is it possible to run windows screensaver in linux using wine? If not, how hard it will be to write support for this?
Thanks,
-- Gleb.
On 2001.12.23 11:10 Gleb Natapov wrote:
Hello all,
Perhaps this was asked before, but I didn't find the answer. Is it possible to run windows screensaver in linux using wine? If not, how hard it will be to write support for this?
Well, there are a few issues: 1. Loading wine takes forever on my box (although this will be fixed in about a week when I get a dual-athlon setup). Not an ideal solution to the speed problem in my mind.. but works for me.
2. You can already run most screensavers using: wine using wine /path/to/screensaver.scr /s An .scr file is essentially just an .exe that has been renamed. The /s switch tells the screensaver to actually run as a screensaver. Without it it will open up the configuration properties for the screensaver.
3. You'll notice that when you run the screensaver like this that it will appear on top of all other windows and when you move the mouse it will go away. That is, the screensaver itself takes care of putting itself above all other windows and will dismiss itself when it gets an event such as mouse move or button press or whatever. XScreenSaver doesn't work this way. You'll notice that most of the commandlines in your .xscreensaver file have the -root option. That means draw in the root window which if you run that by itself (i.e. outside of xscreensaver) you'll notice that it will in fact draw to the root window (i.e. your desktop background). Also, moving the mouse around does nothing... the program simply draws stuff on the screen and absolutely does not handle dismissing itself like a win screensaver.
XScreenSaver creates a virtual root window on top of everything which it then runs the screensaver program in. That way the screensaver program still thinks it is just drawing in the root window, but in reality it is drawing on top of everything. XScreensaver also takes care of dismissing the screensaver when you move the mouse. I believe it does this by sending it a signal of some sort, although I am not entirely sure. You really ought to read its documentation to get all the specifics on this.
However, you /can/ add a line that runs wine to run the screensaver in your .xscreensaver file. In fact, I just tried this. If you run in demo mode you get the expected behavior, it won't go away until you click a button. If you set it as your screensaver and do a normal blank (i.e. not lock) then it'll go away when you move the mouse. However, if you do a lock screen it'll clear the screen to black when you move the mouse, ask you for your password (which for some reason it didn't accept the first time, but maybe I just typed it wrong). Anyway, once you type a valid password you are still looking at the screensaver until you move the mouse again.
So basically it already does mostly work. One way to decrease the startup time would be to start the wineserver in persistent mode before hand. Then the first time you load the screensaver (or some other windows app) it'll take a while, this is because the first client to connect has to set some stuff up. However, after that the wineserver is running and ready to go so it doesn't take very long for the screensaver to start up. (I just checked this, and that is what happens).
One thing you could maybe try to do to decrease this is make a very lightweight wine configuration in a different directory. You can use the WINEPREFIX environment variable to do this. With a bit of configuration you could have a wineserver running permanently listening on a socket in $WINEPREFIX instead of in the usual ~/.wine directory. Also that way when you run windows apps it doesn't affect your other wineserver.
As far as fixing the behavior goes, I have a few ideas. Wine supports a "Desktop" mode where a desktop window is created and all wine drawing is done to that window. You could maybe change wine a bit to allow wine to draw into an already created desktop window (e.g. draw into the root window). That might make things behave a slight bit better. In fact, doing that alone might fix everything. And I also think that doing that should be simple (and maybe there is already a way to do this).
Hope that helps you to figure it out! -Dave
On Sun, Dec 23, 2001 at 03:24:41PM -0500, David Elliott wrote:
Hope that helps you to figure it out!
Yes! Your answer is very helpful. Thank you and others who answered me in private.
-- Gleb.