web-dev-qa-db-fra.com

Comment permettre à Wine d'accéder aux partages réseau?

Je viens d'installer 14.04 à partir de zéro et de faire fonctionner MS Word grâce à wine (1.7.17 de ppa).

Le problème est que je ne peux pas accéder à mes partages de lecteur réseau via Wine (je suis dans un réseau local Office).

Avec l'ancien Ubuntu 11.10, je venais d'ouvrir des fichiers .doc dans MS Word et de les modifier. Il semble maintenant que wine ne puisse pas accéder aux partages samba déjà montés dans Nautilus.

Le problème semble être lié aux changements récents dans la manière de monter des partages réseau d'Ubuntu:

l'ancien répertoire: /home/*username*/.gvfs
a été remplacé par: /run/user/1000/gvfs

Les noms des partages montés ne sont pas lisibles à partir de wine (il essaie donc d'ouvrir le dossier directement à partir de MS Word)

1
Francesco

J'ai trouvé une solution de contournement.
J'utilise 13.04 mais je pense que c'est la même chose.
La solution consiste à associer le dossier GVFS à un autre nom.

Créez ce fichier (gvfs-patch) dans /usr/share/playonlinux/bash:

Sudo -H gedit /usr/share/playonlinux/bash/gvfs-patch  
#!/bin/bash

LOGFILE=/dev/null

GVFS_HOME=/run/user/$USER/gvfs

# Create BASE folder
BASE=/tmp/POL-$USER-gvfs
if [ ! -d "$BASE" ]; then
   echo "Create BASE folder : $BASE" >> $LOGFILE
   rm -fr $BASE
   mkdir $BASE
else
   echo "BASE folder exists : $BASE" >> $LOGFILE
fi

# Clean old symbolic link
for SHARE in $(ls "$BASE"); do
   if [[ ! -e "$BASE/$SHARE" && -h "$BASE/$SHARE" ]]; then
      echo "Remove OLD share folder : $SHARE" >> /tmp/diego.txt
      rm -f "$BASE/$SHARE"
   else
      echo "Share folder valid : $SHARE" >> $LOGFILE
   fi
done

# Create symbolic link for ALL share
for SHARE in $(ls "$GVFS_HOME"); do
   NSHARE=$(echo $SHARE | sed 's/:/-/g')
   if [ ! -e "$BASE/$NSHARE" ]; then
      echo "Create share folder : $NSHARE" >> $LOGFILE
      ln -s "$GVFS_HOME/$SHARE" "$BASE/$NSHARE"
   else
      echo "Share folder valid : $BASE/$NSHARE" >> $LOGFILE
   fi
done

echo $1 | sed "s|$GVFS_HOME|$BASE|g" | sed 's/:/-/g'

Le rendre exécutable

Sudo chmod +x /usr/share/playonlinux/bash/gvfs-patch  
Sudo chown root.root /usr/share/playonlinux/bash/gvfs-patch  

Corrige ce fichier: /usr/share/playonlinux/bash/document_reader

Sudo -H gedit /usr/share/playonlinux/bash/document_reader

A la ligne 43 (avant realpath = ...), ajoutez ceci:

doc=$($PLAYONLINUX/bash/gvfs-patch "$doc")
1
Diego Vicentini

En me basant sur la réponse de Diego, j'ai intégré cela dans un emballage de vin qui peut être utilisé pour des installations de vin classiques. Je n'ai ciblé que le cas spécifique où wine est exécuté en tant que "wine start", où le chemin est le 4ème argument, mais cela pourrait être étendu pour parcourir tous les arguments testant les noms de chemins.

Également pour moi, le dossier dans /run/user était mon UID et non mon nom d'utilisateur.

Créer ce fichier (vin) dans /usr/local/bin

Sudo -H gedit /usr/local/bin/wine

ajoutez ces contenus:

#!/bin/bash

LOGFILE=/dev/null
GVFS_HOME=/run/user/`id -u $USERID`/gvfs
BASE=/tmp/POL-$USER-gvfs

setupgvfstmp() {
  # Create BASE folder
  if [ ! -d "$BASE" ]; then
     echo "Create BASE folder : $BASE" >> $LOGFILE
     rm -fr $BASE
     mkdir $BASE
  else
     echo "BASE folder exists : $BASE" >> $LOGFILE
  fi

  # Clean old symbolic link
  for SHARE in $(ls "$BASE"); do
     if [[ ! -e "$BASE/$SHARE" && -h "$BASE/$SHARE" ]]; then
        echo "Remove OLD share folder : $SHARE" >> /tmp/diego.txt
        rm -f "$BASE/$SHARE"
     else
        echo "Share folder valid : $SHARE" >> $LOGFILE
     fi
  done

  # Create symbolic link for ALL share
  for SHARE in $(ls "$GVFS_HOME"); do
     NSHARE=$(echo $SHARE | sed 's/:/-/g')
     if [ ! -e "$BASE/$NSHARE" ]; then
        echo "Create share folder : $NSHARE" >> $LOGFILE
        ln -s "$GVFS_HOME/$SHARE" "$BASE/$NSHARE"
     else
        echo "Share folder valid : $BASE/$NSHARE" >> $LOGFILE
     fi
  done
}

if [ "$1" = "start" ] &&  [ -e "$4" ]; then
  # This only fiddles with stuff if the path is in $4, cos thats what my desktop shortcuts seem to do
  #env WINEPREFIX="/home/phil/.wine" wine start /ProgIDOpen Excel.Sheet.12 %f
  START=$1
  WHAT=$2
  FLAG=$3
  TARGET=$4
  shift 4
  echo "$TARGET" | grep $GVFS_HOME > /dev/null 2>&1
  if [ "$?" == 0 ]; then
    # Because gvfs sometimes hangs for me, only do this if the path is in gvfs
    setupgvfstmp
    TARGET=`echo $TARGET | sed "s|$GVFS_HOME|$BASE|g" | sed 's/:/-/g'`
  fi
  /usr/bin/wine "$START" "$WHAT" "$FLAG" "$TARGET" "$@"
else
  /usr/bin/wine "$@"
fi

Le rendre exécutable

Sudo chmod +x /usr/local/bin/wine 

Assurez-vous que /usr/local/bin est dans votre $ PATH et vient avant /usr/bin.

1
Phil Hallows