Forum

Désactiver certains dossiers wine (Bureau, Mes images, …)

Författare Svar
percherie Monday 20 May 2013 at 22:35
percherieAnonymous

Bonsoir,


Pour les besoins d'un script j'aimerai savoir si il est possible de modifier ou de désactiver en ligne de commande certains dossier présent dans l'onglet "Intégration du bureau" dans l'outil wincfg.

En pratique je souhaite désactiver les dossiers suivants :
 - Bureau
 - Mes images
 - Ma musique
 - Mes vidéos
petch Monday 20 May 2013 at 22:58
petch
Developer

Bonsoir,
En s'inspirant du source du pseudo composant "PrivateUserDirs" ça devrait être possible; Lui enlève toutes les redirections, qui sont en fait des symlinks :
find "$WINEPREFIX/drive_c/" -type l -exec sh -c 'echo "fixing {}"; rm "{}"; mkdir "{}"' \\;
percherie Monday 20 May 2013 at 23:27
percherieAnonymous

J'ai quelques difficulté à comprendre cette ligne de code.

Je comprend qu'on va dans le dossier de l'application, puis le dossier "drive_c" mais pour la suite je sèche. Je ne vois pas quelle donnée cela va supprimer.

petch Monday 20 May 2013 at 23:33
petch
Developer

-type l sélectionne uniquement les symlinks
pour chacun il est ensuite effectué un rm pour les enlever, et un mkdir pour les remplacer par un répertoire vide du même nom.
percherie Tuesday 21 May 2013 at 0:22
percherieAnonymous

Merci pour les explications, maintenant je vois exactement le travail qu'il me reste à faire.

Est ce que la suppression sans recréer de répertoire vide peut être envisageable ? Est ce que cela peut poser des problèmes pour les logiciels ?
Je compte faire supprimer les simlinks que je n'utilise pas mais peut être que je doit les remplacer par des répertoires
petch Tuesday 21 May 2013 at 0:32
petch
Developer

Ce sont des répertoires spéciaux pour l'utilisateur : son bureau, etc.
Donc au mieux s'ils manquent ils seront recréés, au pire on se retrouve avec des comportements bizarres comme des fichiers .lnk qui apparaissent un peu partout parce que les programmes ne peuvent pas écrire dans le répertoire "Documents récents". (http://bugs.winehq.org/show_bug.cgi?id=15480)
Bref, j'aime autant m'en assurer en les recréant dans le script.
percherie Tuesday 21 May 2013 at 8:50
percherieAnonymous

Merci pour ces informations. Mes connaissances en bash étant limitée je n'ai pas trouvé comment remplacer un dossier réel par un lien symbolique en une seul commande mais voici ce que je propose, il y a sûrement une amélioration à faire :
find "$WINEPREFIX/drive_c/" -type l -exec sh -c 'echo "fixing {}"; rm "{}"; mkdir "{}"' \\;
rm $WINEPREFIX/drive_c/users/$USER/Mes documents;
ln -s /home/$USER/ "Mes documents";

Le principal problème est que la cible "Mes documents" est un dossier en français. Chez un utilisateur anglais, espagnol (ou autre) cela ne fonctionnera pas. Est ce que je doit créer ce code pour chaque langue ou existe il une variable centralisant cette information ?

Ändrat av percherie

petch Tuesday 21 May 2013 at 13:11
petch
Developer

Pour supprimer un répertoire vide il faut utiliser rmdir et non rm.
Les ";" sont inutiles, chaque instruction étant sur sa propre ligne (\\; fait partie de la syntaxe d'utilisation de find -exec).
Attention aux espaces, c'est un séparateur d'arguments; La commande rm en l'état a deux arguments à cause de l'espace, il faut utiliser les double guillemets comme à la ligne suivante.
Dans la ligne suivante par contre aucun chemin n'est spécifié pour "Mes documents" donc le lien symbolique va être créé dans le répertoire courant.
Mais le plus compliqué va être de récupérer le chemin de "Mes documents", parce que l'info n'existe que dans la base de registres de Wine.
     MYDOCS="$(winepath -u $(POL_Wine regedit /E - 'HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders' | sed -n 's/"Personal"="\\(.*\\)".*/\\1/p'))"
Xodetaetl Tuesday 21 May 2013 at 15:42
XodetaetlAnonymous

Petch, tu gères comment toi les jeux/patchs/.. qui te mettent un lien windows sur le bureau linux à cause du symlink de Wine ? Tu fais ça, supprimer le lien et créer un dossier Bureau vide ?
petch Tuesday 21 May 2013 at 19:10
petch
Developer

@Xodetaetl: Vu que je n'utilise PlayOnLinux que pour les jeux et n'ai aucun intérêt dans l'intégration de Wine (mes jeux n'ont pas besoin d'accéder aux documents dans mon répertoire Linux -et- je déteste que mon répertoire home ressemble à un champ de ruines après avoir testé 200 jeux), je suis allé un cran plus loin et j'exécute une commande similaire à celle présentée ci-dessus dans un "hook" non documenté qui s'exécute après la création de chaque préfixe Wine.
Je viens juste de commencer à expérimenter une légère variation, je remplace tous les symlinks par des symlinks vers un répertoire dédié (~/POLSandox/ en l'occurrence), cela devrait amener l'avantage de la persistance des sauvegardes de jeux, sans l'inconvénient de se les retrouver dans le répertoire home.

Ändrat av petch

Xodetaetl Tuesday 21 May 2013 at 19:28
XodetaetlAnonymous

Ce serait une bonne solution. Tu comptes l'intégrer dans PoL ou ça reste une solution perso ? je n'ai pas bien compris.
petch Tuesday 21 May 2013 at 19:30
petch
Developer

@percherie: Je suggère ceci:
MYDOCS="$(winepath -u "$(POL_Wine regedit /E - 'HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders' | sed -n 's/"Personal"="\\(.*\\)".*/\\1/p')")"
find "$WINEPREFIX/drive_c/" -type l -a -not -samefile "$MYDOCS" -exec sh -c 'echo "fixing {}"; rm "{}"; mkdir "{}"' \\;

Par contre je ne garantis pas que le find de Mac OS supporte toutes ces options...
petch Tuesday 21 May 2013 at 19:39
petch
Developer

@Xodetaetl: le hook est présent dans PlayOnLinux, donc "théoriquement" tout le monde peut se bricoler l'équivalent.
Le proposer comme une fonctionnalité bien polie est une autre paire de manches, tout le monde n'utilise pas PlayOnLinux que pour des jeux.
On pourrait imaginer que les scripts contiennent une méta information ou une commande supplémentaire pour signaler que le programme n'a pas besoin d'accéder aux fichiers du répertoire utilisateur Linux, et que dans l'interface graphique l'utilisateur puisse choisir le comportement à adopter dans ce cas (laisser ouvert/fermer/répertoire partagé)
percherie Saturday 25 May 2013 at 20:46
percherieAnonymous

@percherie: Je suggère ceci:

MYDOCS="$(winepath -u "$(POL_Wine regedit /E - 'HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders' | sed -n 's/"Personal"="\\(.*\\)".*/\\1/p')")"
find "$WINEPREFIX/drive_c/" -type l -a -not -samefile "$MYDOCS" -exec sh -c 'echo "fixing {}"; rm "{}"; mkdir "{}"' \\;

Par contre je ne garantis pas que le find de Mac OS supporte toutes ces options...

Quote from petch


Merci pour le coup de pouce. Je suis sur un terrain en camion/tente pour tout l'été sans pc pour travailler. Je vais faire un essai dès que je peut.

Peut être est il possible de faire en sorte que PlayOnLinux modifie les configurations de wine en ligne de commande comme si on passait par l'interface de wincfg