How to enable a Windows application in WINE to access a Samba share on a NAS (continued)
October 26, 2019 2 Comments
In a 2016 post ‘How to enable a Windows application in WINE to access a Samba share on a NAS‘ I explained how to mount in Linux a networked SMB shared folder so that a Windows application running via WINE could access the folder as Drive Y: in order to open and save files in it. In that blog post I also listed a couple of Bash scripts to facilitate the mounting and unmounting of the SMB share for the WINEPREFIX used for the Windows application (~/.wine-pdfxve6
in the example I gave for PDF-XChange Editor, Version 6). However, as I have several Windows applications running via WINE on my machines, and I have used a different WINEPREFIX for each of them, I wanted to be able to mount the SMB share for whichever of those applications I happen to be using at the time. Therefore I modified the original Bash scripts as shown below. The Desktop Configuration files (.desktop
files) to launch the scripts are essentially the same as in my earlier blog post; I have just removed the references to the specific Windows application. The four modified files are listed below. Obviously change the username, SMB share name and SMB server name to suit your own situation.
1. Bash script ~/mount_bsfnas1_brianfolder_share.sh
#!/bin/bash mount_share () { echo echo "Enter your Linux account password below..." echo sudo ln -s /media/bsfnas1/brianfolder ~/$PREFIX/dosdevices/y: sudo mount.cifs //bsfnas1/brianfolder/ -o user=brianfolder,pass=enricocaruso,uid=$(id -u),gid=$(id -g) ~/$PREFIX/dosdevices/y: } echo echo "This will mount the Samba share folder brianfolder on the bsfnas1 machine." echo echo echo "== Select which WINEPREFIX you wish to use ==" echo ls ~/.wine-* | grep .wine | awk -F'/' '{print NR " " substr($4, 1, length($4)-1)}' NUMPREFIXES=$(ls ~/.wine-* | grep .wine | wc -l) echo read -p "Enter number (q to abort) and press ENTER: " CHOICE if [ "$CHOICE" != "q" ] && [ "$CHOICE" -gt 0 ] && [ "$CHOICE" -le $NUMPREFIXES ]; then PREFIX=$(ls ~/.wine-* | grep .wine | awk -F'/' '{print NR " " substr($4, 1, length($4)-1)}' | grep "$CHOICE " | awk -F' ' '{print $2}') echo if [ ! -e ~/$PREFIX/dosdevices/y: ]; then mount_share else echo -n "~/$PREFIX/dosdevices/y: already exists. Is it OK to proceed anyway (y/n)? " read ANSWER if [ $ANSWER = "y" ]; then rm ~/$PREFIX/dosdevices/y: mount_share fi fi echo fi if grep -q "/media/bsfnas1/brianfolder" /proc/mounts; then echo "Samba share //bsfnas1/brianfolder is mounted for WINEPREFIX ~/$PREFIX ." else echo "Samba share //bsfnas1/brianfolder is not mounted." fi echo echo "You may now close this window." read ANSWER exit
2. Bash script ~/umount_bsfnas1_brianfolder_share.sh
#!/bin/bash echo echo "This will unmount the Samba share folder brianfolder on the bsfnas1 machine." echo echo "Enter your Linux account password below..." echo sudo umount ~/.wine-*/dosdevices/y: 2>/dev/null echo if grep -q "/media/bsfnas1/brianfolder" /proc/mounts; then echo "Samba share //bsfnas1/brianfolder is mounted." else echo "Samba share //bsfnas1/brianfolder is not mounted." fi echo echo "You may now close this window." exit
3. Desktop Configuration file ~/Desktop/mount_bsfnas1_brianfolder_share.desktop
[Desktop Entry] Comment[en_GB]=Mount bsfnas1 brianfolder share for current WINEPREFIX Comment=Mount bsfnas1 brianfolder share for current WINEPREFIX Exec=sh /home/fitzcarraldo/mount_bsfnas1_brianfolder_share.sh GenericName[en_GB]=Mount bsfnas1 brianfolder share for current WINEPREFIX GenericName=Mount bsfnas1 brianfolder share for current WINEPREFIX Icon=media-mount MimeType= Name[en_GB]=mount_bsfnas1_brianfolder_share Name=mount_bsfnas1_brianfolder_share Path= StartupNotify=true Terminal=true TerminalOptions=\s--noclose Type=Application X-DBUS-ServiceName= X-DBUS-StartupType=none X-KDE-SubstituteUID=false X-KDE-Username=fitzcarraldo
4. Desktop Configuration file ~/Desktop/umount_bsfnas1_brianfolder_share.desktop
[Desktop Entry] Comment[en_GB]=Unmount bsfnas1 brianfolder share for current WINEPREFIX Comment=Unmount bsfnas1 brianfolder share for current WINEPREFIX Exec=sh /home/fitzcarraldo/umount_bsfnas1_brianfolder_share.sh GenericName[en_GB]=Unmount bsfnas1 brianfolder share for current WINEPREFIX GenericName=Unmount bsfnas1 brianfolder share for current WINEPREFIX Icon=media-eject MimeType= Name[en_GB]=umount_bsfnas1_brianfolder_share Name=umount_bsfnas1_brianfolder_share Path= StartupNotify=true Terminal=true TerminalOptions=\s--noclose Type=Application X-DBUS-ServiceName= X-DBUS-StartupType=none X-KDE-SubstituteUID=false X-KDE-Username=fitzcarraldo
Now when I double-click on the icon to mount the SMB share for a Windows application running via WINE, a terminal window pops up displaying the WINEPREFIXs currently installed on my machine:
This will mount the Samba share folder brianfolder on the bsfnas1 machine.
== Select which WINEPREFIX you wish to use ==
1 .wine-3dimviewer
2 .wine-myphoneexplorer
3 .wine-nbtscan
4 .wine-pdfxve6
5 .wine-PortableApps
6 .wine-radiant
7 .wine-symmetry
8 .wine-visio
9 .wine-xnviewmp
Enter number (q to abort) and press ENTER:
Let’s say I want to use the Windows application XnViewMP. I would enter ‘9’ and press ‘Enter’. The rest of the interaction should be obvious:
This will mount the Samba share folder brianfolder on the bsfnas1 machine.
== Select which WINEPREFIX you wish to use ==
1 .wine-3dimviewer
2 .wine-myphoneexplorer
3 .wine-nbtscan
4 .wine-pdfxve6
5 .wine-PortableApps
6 .wine-radiant
7 .wine-symmetry
8 .wine-visio
9 .wine-xnviewmp
Enter number (q to abort) and press ENTER: 9
~/.wine-xnviewmp/dosdevices/y: already exists. Is it OK to proceed anyway (y/n)? y
Enter your Linux account password below...
[sudo] password for fitzcarraldo:
Samba share //bsfnas1/brianfolder is mounted for WINEPREFIX ~/.wine-xnviewmp .
You may now close this window.
Henceforth the Windows application XnViewMP will be able to access the Y:
drive which is actually the SMB share //bsfnas1/brianfolder
.
Once I have finished using the application, I just double-click on the the icon to unmount the SMB share, and a terminal window pops up displaying the following:
This will unmount the Samba share folder brianfolder on the bsfnas1 machine.
Enter your Linux account password below...
[sudo] password for fitzcarraldo:
Samba share //bsfnas1/brianfolder is not mounted.
You may now close this window.
Once I have entered my Linux password for the local machine, the script will unmount the SMB share and the terminal window will close automatically if you have configured the Desktop Configuration file by right-clicking on the icon and unticking ‘Do not close when command exits’ in KDE, ‘Keep terminal window open after command execution’ in LXDE, or similar in other desktop environments.
Note: If you use Microsoft Office via WINE, you also might be interested in a comment on my earlier blog post about a Microsoft Office problem in saving files to a remote SMB share.
N.B. If it does not already exist, you need to create a mountpoint:
$ sudo mkdir -p /media/mynetworkstore/myfiles
For example:
$ sudo mkdir -p /media/bsfnas1/brianfolder
Pingback: Moving from Lubuntu 18.04 to 20.10 | Fitzcarraldo's Blog