Tofystedeth
2009-Feb-06 14:38 UTC
[Wine] Program won't load fonts when run outside of installed dir
I'm trying get a couple pieces of software we use at work so we can replace a bunch of aging Windows machines with Linux boxes, but I'm having a little trouble. I'll start with the potentially easiest problem first. One of the programs I'm trying to use is Lightspeed Virtual Terminal. It runs fairly well with just a couple of glitches. If I go to the directory it was installed to, either in the terminal or the file browser, and run it with the "Wine Program Loader" menu option, or 'wine lsvt.exe' it opens normally. However, if I try to create a link or a launcher for it, it doesn't load the fonts and comes up looking awful. How can I fix this?
James Mckenzie
2009-Feb-06 18:53 UTC
[Wine] Program won't load fonts when run outside of installed dir
Tofystedeth <wineforum-user at winehq.org>>Sent: Feb 6, 2009 7:38 AM >To: wine-users at winehq.org >Subject: [Wine] Program won't load fonts when run outside of installed dir > >I'm trying get a couple pieces of software we use at work so we can replace a bunch of aging Windows machines with Linux boxes, but I'm having a little trouble. I'll start with the potentially easiest problem first. > >One of the programs I'm trying to use is Lightspeed Virtual Terminal. It runs fairly well with just a couple of glitches. If I go to the directory it was installed to, either in the terminal or the file browser, and run it with the "Wine Program Loader" menu option, or 'wine lsvt.exe' it opens normally. However, if I try to create a link or a launcher for it, it doesn't load the fonts and comes up looking awful. > >How can I fix this? >Use a laucher which calls a Unix script that sets the directory and then calls wine lvst.exe. This is how programs are supposed to be run with Wine. James McKenzie
L. Rahyen
2009-Feb-06 19:41 UTC
[Wine] Program won't load fonts when run outside of installed dir
On 2009-02-06 (Friday) 14:38:43 Tofystedeth wrote:> I'm trying get a couple pieces of software we use at work so we can replace > a bunch of aging Windows machines with Linux boxes, but I'm having a little > trouble. I'll start with the potentially easiest problem first. > > One of the programs I'm trying to use is Lightspeed Virtual Terminal. It > runs fairly well with just a couple of glitches. If I go to the directory > it was installed to, either in the terminal or the file browser, and run it > with the "Wine Program Loader" menu option, or 'wine lsvt.exe' it opens > normally. However, if I try to create a link or a launcher for it, it > doesn't load the fonts and comes up looking awful. > > How can I fix this?Short answer: You are always supposed to run a Windows program from where it was installed. So, when creating a launcher use something like "wine start /unix /path/to/your_program.exe" to start your program. If you want to create a link then link to script with "wine start /unix /path/to/your_program.exe" inside. Also you need to set WINEPREFIX environment variable in your script and convert with winepath all Unix paths in argument list for Windows program or it will not find files you want to open with it. This means, for example, that you cannot drag'n'drop file from Konqueror onto Windows program and expect it to open it. Please read long answer below if you want to solve all of above problems once and for all. Long answer: personally I dislike to write "wine start /unix ..." or "wine ..." or to cd to directory where a program is installed and think about current WINEPREFIX environment variable everytime I want to run Windows program; also I dislike that I cannot drag'n'drop in Konqueror a file onto Windows program (well, actually I can but result of such operation will not be useful) or can't use Unix path to a file I want to open it with Windows program. Writing program-specific script for each Windows programs isn't and option, especially if you are using more than a few of Windows programs. To solve these problems I prefer to use support for misc binaries in the Linux kernel. Using it you can run any Windows executable directly (in other words you will be able to run Windows executables exactly the same as you run native Linux executables - for example you can type in your terminal "/path/to/your_program.exe" and hit enter and your_program.exe will run). If you want to use support for misc binaries to run Windows programs in Linux I recommend you to create wrapper script /usr/local/bin/winestart with the following content (actually this script is useful even if you don't want to use support for misc binaries). #!/bin/sh # Copyright (C) 2009 L. Rahyen # License: GNU LGPL version 2 or later if [[ -z "$WINEPREFIX" ]]; then { APATH="$@" if [[ -n "`echo $APATH | cut -d/ -f1`" ]]; then { APATH="`pwd`/$@" } fi WINEPREFIX="`echo \"$APATH\" | sed 's/\/\.\//\//g;s/\/dosdevices\/.:\//\/drive_c\//;s/\harddiskvolume0/\/drice_c\//' | awk ' { n = split($0, a, "/drive_c/") printf("%s", a[1]); } '`" export WINEPREFIX if [[ ! -d "$WINEPREFIX" ]]; then { unset WINEPREFIX } fi } fi ARGS="$1" shift while [[ "$1" != "" ]]; do { FILE="`winepath -w \"$1\" | sed 's/ /\\ /g'`" if [[ -e "`winepath -u \"$FILE\"`" ]]; then { ARGS="$ARGS $FILE" } else { ARGS="$ARGS $1" } fi echo "$ARGS" shift } done wine start /unix "$ARGS" Then save it and make it executable by running "sudo chmod +x /usr/local/bin/winestart". Then run this as root: echo ':DOSWin:M::MZ::/usr/local/bin/winestart:' > /proc/sys/fs/binfmt_misc/register Make sure to put this command somewhere in your startup scripts (if you already have it there then change it accordingly); otherwise after reboot you will need to run it manually again. If you get "write error" then you already have DOSWin registered and you need to unregister it by running: echo -1 > /proc/sys/fs/binfmt_misc/DOSWin ...then run "echo ':DOSWin:M::MZ::/usr/local/bin/winestart:' > /proc/sys/fs/binfmt_misc/register" again. Now you can run (for example) notepad like this: ~/.wine/drive_c/windows/notepad.exe And even if you run your program in non-default Wine prefix it will run correctly. For running next few examples you need non-default Wine prefix so let's create one (unset command in second line is there just in case if you have non-empty WINEPREFIX environment variable): WINEPREFIX=~/.my-wine-prefix wineboot unset WINEPREFIX Now you can start notepad like this: ~/.my-wine-prefix/drive_c/windows/notepad.exe Or like this: cd ~/.my-wine-prefix/drive_c/ windows/notepad.exe ...And in both cases winestart the wrapper script will detect that you are running notepad in non-default Wine prefix and will run notepad in ~/.my-wine-prefix Wine prefix (instead of using default ~/.wine). Obviously instead of notepad.exe you can run any program you want (usually you can find your Windows programs in drive_c/Program\ Files directory). Another example: ~/.my-wine-prefix/dosdevices/z:/$HOME/your-program.exe Or: cd ~/.my-wine-prefix/dosdevices/z:/$HOME/ ./your-program.exe Both commands will run your-program.exe in ~/.my-wine-prefix Wine prefix. However if you explicitly specify Wine prefix using WINEPREFIX environment variable it will override auto-detection. For example: WINEPREFIX=~/.wine ~/.my-wine-prefix/drive_c/windows/notepad.exe This will run ~/.my-wine-prefix/drive_c/windows/notepad.exe in ~/.wine Wine prefix. Overriding auto-detection is useful sometimes for testing (for example you can run a program installed in ~/.my-wine-prefix using ~/.wine Wine prefix where it wasn't installed to see how well (or how bad) your program will work without installation). Support for direct execution of Windows executables will work with all file managers and shells so you can run all your Windows programs like native ones. Make sure to remove all associations in your file manager(s) with Wine (*.exe files) so file manager(s) can run Windows programs directly. Also you can specify in your launcher(s) Windows programs without prefixing them with "wine " or "wine start /unix" and/or specifying Wine WINEPREFIX environment variable (so in many cases you can use hard or symbolic links instead of launchers). Few more examples... Let's create a simple text file: echo Text > ~/text.txt Now let's try to open it with notepad (or any other Windows program you like): cd ~/.my-wine-prefix/drive_c/windows/ ./notepad.exe ~/text.txt Notepad will successfully open ~/text.txt! If you are using Konqueror run it and go to "~/.my-wine-prefix/drive_c/windows/". You should see notepad.exe. Run another instance of Konqueror (or split Konqueror window you just opened); make sure that you can see two Konqueror windows simultaneously. In another Konqueror window go to your home directory and find text.txt. Now drag'n'drop text.txt to notepad.exe - Notepad will open text.txt for you. As you can see this script and support for misc binaries is very useful when used properly. I hope this information will be helpful. If something doesn't work as you expected let me know.