Définition de différentes applications par défaut pour différents environnements de bureau


9

J'utilise Ubuntu 12.04 avec l'interface Unity par défaut. J'ai installé plus tard le bureau KDE, XFCE, LXDE, gnome-shell et Cinnamon.

KDE est fourni avec des applications par défaut différentes de Unity, telles que

  • kwrite pour l'édition de texte,
  • konsole comme terminal virtuel,
  • kfontview pour l'affichage et l'installation des polices,
  • dolphin comme navigateur de fichiers, etc.

D'autres DE sont livrés avec d'autres applications par défaut.

Le problème se pose lorsque vous voulez ouvrir un fichier tel qu'un fichier texte, avec lequel vous pouvez à la fois ouvrir par geditet kwrite, je veux utiliser kwritesur KDE et geditsur Unity ou Gnome. Mais, il n'y a aucun moyen de régler comme ça. Je peux définir l'application par défaut pour le fichier texte en modifiant les paramètres respectifs dans KDE et Unity, mais cela devient par défaut pour les deux DE.

Par exemple, si je définis kfontviewercomme application d'affichage des polices par défaut dans KDE, il ouvre également les polices lorsque je suis dans Unity ou Gnome et vice versa. C'est un problème car, le chargement d'un autre programme DE prend beaucoup de temps que celui par défaut pour le DE utilisé.

Ma question est: Puis-je utiliser différentes applications par défaut pour différents DE? Comment?


Réponses:


5

J'ai mis en place cette solution pour résoudre votre problème et l'ai testée sur KDE et XFCE avec l'ouverture de fichiers texte et de fichiers de polices. Il s'agit d'une solution générique qui devrait être applicable à n'importe quel nombre d'environnements de bureau et de types MIME. La façon dont cela fonctionne est qu'il existe un simple script python appelé custom-open qui ouvrira un fichier en utilisant différentes applications pour différents environnements de bureau. Voici les étapes pour configurer la solution:

  1. enregistrez le script d'ouverture personnalisée sur votre ordinateur, de préférence sur votre chemin, mais ce n'est pas obligatoire.
  2. enregistrez .custom-open.ini dans votre répertoire personnel ~ / .custom-open.ini
  3. définissez custom-open comme application par défaut pour tous les types de fichiers que vous souhaitez gérer.

ouverture sur mesure

#!/usr/bin/env python
import traceback, sys, os, ConfigParser, os.path
from subprocess import Popen, check_output
from gtk import MessageDialog, MESSAGE_ERROR, BUTTONS_CLOSE

try:
    file, desktop = sys.argv[1], os.environ['DESKTOP_SESSION']
    mime = check_output(['file', '--mime-type', file]).strip().split(': ')[1]
    config = ConfigParser.RawConfigParser()
    config.read(os.path.expanduser('~/.custom-open.ini'))
    cmd = config.get(desktop, mime)
    Popen([cmd] + sys.argv[1:])
except:
    msg = "CUSTOM OPEN ERROR\n\n" + traceback.format_exc()
    MessageDialog(None, 0, MESSAGE_ERROR, BUTTONS_CLOSE, msg).run()

.custom-open.ini

[gnome]
text/plain = gedit
application/x-font-ttf = gnome-font-viewer

[xubuntu]
text/plain = leafpad
application/x-font-ttf = gnome-font-viewer

[kde-plasma]
text/plain = kate
application/x-font-ttf = kfontview

ce qui est génial avec cette solution, c'est que vous pouvez ajouter autant de nouveaux environnements de bureau que vous le souhaitez et autant de types MIME que vous le souhaitez. pour vérifier le nom que vous devez fournir pour l'environnement de bureau, exécutez la commande ci-dessous dans un terminal.

env | grep -i DESKTOP_SESSION

pour vérifier le type mime exact d'un fichier, lancez simplement:

file --mime-type filename

EDITED: La nécessité de liens symboliques a été supprimée, ce qui devrait faciliter son utilisation. J'ai également ajouté un gestionnaire d'erreurs graphique qui affichera une alerte en cas d'erreur.


1
Merci pour votre réponse. J'ai suivi vos étapes et créé tous les scripts, liens et fichiers correspondants. Votre solution fonctionne très bien depuis la ligne de commande et fonctionne comme annoncé. Mais lorsque j'essaie de définir le script (ou plutôt le lien symbolique) comme application par défaut pour ouvrir un type de fichier spécifique, il échoue et revient à la valeur par défaut secondaire. Je ne sais pas si je fais quelque chose de mal.
Glutanimate

Voici comment j'ai défini le script comme application par défaut: 1.) créez un lanceur ( co.desktop) avec Exec=/home/user/.scripts/Customization/Defaultapps/custom-open-textdans ~ / .local / share / applications. 2.) Modifier ./local/share/applications/mimeapps.listet ajoutez l'association par défaut suivant: text/plain=co.desktop. Trouvez des erreurs dans cette procédure?
Glutanimate

1
ok essayez la nouvelle version, j'ai fait quelques améliorations pour la rendre plus facile à utiliser. J'ai également ajouté le gestionnaire d'erreur graphique, il devrait maintenant afficher une alerte avec le message d'erreur. Réessayez et postez le message d'erreur dans un commentaire s'il ne fonctionne toujours pas. Pourriez-vous également mentionner quelle version d'Ubuntu et quel environnement de bureau vous avez essayé.
Marwan Alsabbagh

Cela fonctionne et il le fait de manière fantastique (en utilisant LXDE / Unity)! Votre solution mérite chaque dernier point de cette prime. Merci beaucoup d'avoir pris le temps de le faire. (PS: je pense toujours qu'une fonction comme celle-ci devrait être fournie avec Ubuntu par défaut. Le saut de DE n'est peut-être pas une pratique populaire, mais il est assez courant pour justifier une solution officielle.)
Glutanimate

1
Je suis désolé, mais je ne suis pas l'OP, je mets simplement en place la prime. @Olive Twist devra marquer sa propre question comme ayant reçu une réponse.
Glutanimate

2

Si vous ne trouvez pas la "bonne" façon de le faire, vous pouvez utiliser une méthode de force brute quelque chose comme:

  1. Définissez toutes les valeurs par défaut dans un environnement de bureau
  2. Faites quelque chose comme un cd $HOME;ls -Rlrt | lesspour savoir quels fichiers viennent d'être mis à jour - c'est-à-dire où ces choix ont été enregistrés
  3. Faites une copie distincte de ces fichiers pour chaque environnement de bureau (sauvegardé).
  4. Répétez l'opération pour chaque environnement de bureau
  5. Copiez l'ensemble approprié en place juste avant de passer à cet environnement de bureau (probablement en vous déconnectant, en vous reconnectant et en sélectionnant le nouvel environnement de bureau).

Espérons qu'il existe un moyen de basculer les environnements de bureau à partir d'un script shell avec la possibilité de dire à l'environnement de bureau où obtenir ses fichiers de configuration. Cela pourrait être plus propre que de déplacer des fichiers tout le temps, mais je n'ai pas recherché si ni comment cela fonctionne.

Une autre solution, beaucoup plus simple, mais pas exactement ce que vous avez demandé, serait de simplement:

  1. Créez des comptes d'utilisateurs distincts pour chaque environnement de bureau
  2. Créer un nouveau groupe pour ces utilisateurs
  3. Ajoutez tous ces utilisateurs au nouveau groupe
  4. Créez tous les fichiers de données communs auxquels vous devez accéder à partir de tous ces utilisateurs -rwxrwxr-x ( chmod 775 list-of-files-and-directories). De cette façon, vous n'obtiendrez pas d'erreurs d'autorisation en essayant d'écrire dans un fichier qu'un autre de vos "utilisateurs" a écrit en premier.

    • Si vous souhaitez que certains fichiers soient identiques pour tous ces utilisateurs, vous pouvez les créer en un seul utilisateur et les lier symboliquement aux autres. Cela devrait fonctionner, mais vous devrez vous rappeler qu'ils sont configurés de cette façon lorsque vous modifiez l'un d'entre eux. Par exemple, si vous modifiez l'un d'entre eux et que votre éditeur crée un fichier de sauvegarde, ce fichier de sauvegarde ne sera enregistré que là où vous l'avez modifié, pas sur tous les autres comptes d'utilisateurs.

Vous pourriez noter où les associations de fichiers par utilisateur sont stockées~/.local/share/mime/
RobotHumans
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.