Festlegen verschiedener Standardanwendungen für verschiedene Desktop-Umgebungen

9

Ich verwende Ubuntu 12.04 mit der Standard-Unity-Oberfläche. Ich habe später den KDE-Desktop, XFCE, LXDE, Gnome-Shell und Cinnamon installiert.

Der KDE wird mit anderen Standardanwendungen als Unity geliefert, z

  • kwrite zur Textbearbeitung,
  • konsole als virtuelles Terminal,
  • kfontview zum Anzeigen und Installieren von Schriftarten,
  • dolphin als Dateibrowser etc.

Andere DE werden mit einigen anderen Standardanwendungen geliefert.

Das Problem tritt auf, wenn Sie eine Datei wie eine Textdatei öffnen möchten, mit der sowohl von geditals auch kwrite, die ich kwriteauf KDE und geditauf Unity oder Gnome verwenden möchte, geöffnet werden kann . Aber es gibt keine Möglichkeit, so zu setzen. Ich kann die Standardanwendung für Textdateien festlegen, indem ich die entsprechenden Einstellungen sowohl in KDE als auch in Unity ändere. Sie wird jedoch für beide DE zur Standardeinstellung.

Wenn ich kfontviewerbeispielsweise in KDE die Standardanwendung zum Anzeigen von Schriftarten festgelegt habe, werden auch Schriftarten geöffnet, wenn ich mich in Unity oder Gnome befinde, und umgekehrt. Dies ist ein Problem, da das Laden des Programms anderer DE viel länger dauert als das Standardprogramm für das verwendete DE.

Meine Frage ist: Kann ich verschiedene Standardanwendungen für verschiedene DE verwenden? Wie?

Anwar
quelle
2
Mitch

Antworten:

5

Ich habe diese Lösung zusammengestellt, um Ihr Problem zu beheben, und sie auf KDE und XFCE mit dem Öffnen von Text- und Schriftdateien getestet. Es ist eine generische Lösung, die auf eine beliebige Anzahl von Desktop-Umgebungen und MIME-Typen anwendbar sein sollte. So funktioniert es: Es gibt ein einfaches Python-Skript namens custom-open, das eine Datei mit verschiedenen Anwendungen für verschiedene Desktop-Umgebungen öffnet. Dies sind die Schritte zum Einrichten der Lösung:

  1. Speichern Sie ein benutzerdefiniertes Skript auf Ihrem Computer, vorzugsweise auf Ihrem Pfad, muss es aber nicht sein.
  2. Speichern Sie .custom-open.ini in Ihrem Home-Verzeichnis ~ / .custom-open.ini
  3. Legen Sie benutzerdefinierte Öffnung als Standardanwendung für alle Dateitypen fest, die von ihr verarbeitet werden sollen.

benutzerdefiniert öffnen

#!/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

Das Besondere an dieser Lösung ist, dass Sie so viele neue Desktop-Umgebungen hinzufügen können, wie Sie möchten, und so viele MIME-Typen, wie Sie möchten. Um zu überprüfen, welchen Namen Sie für die Desktop-Umgebung angeben sollten, führen Sie den folgenden Befehl in einem Terminal aus.

env | grep -i DESKTOP_SESSION

Um den genauen MIME-Typ einer Datei zu überprüfen, führen Sie einfach Folgendes aus:

file --mime-type filename

BEARBEITET: Die Notwendigkeit für symbolische Links wurde entfernt. Dies sollte die Verwendung vereinfachen. Ich habe auch einen grafischen Fehlerbehandler hinzugefügt, der eine Warnung ausgibt, wenn ein Fehler auftritt.

Marwan Alsabbagh
quelle
1
Vielen Dank für Ihre Antwort. Ich habe Ihre Schritte befolgt und alle entsprechenden Skripte, Links und Dateien erstellt. Ihre Lösung funktioniert hervorragend über die Befehlszeile und funktioniert wie angekündigt. Wenn ich jedoch versuche, das Skript (oder vielmehr den symbolischen Link) als Standardanwendung zum Öffnen eines bestimmten Dateityps festzulegen, schlägt dies fehl und wird auf den sekundären Standard zurückgesetzt. Ich weiß nicht, ob ich etwas falsch mache.
Glutanimate
So habe ich das Skript als Standard-App definiert: 1.) Erstellen Sie einen Launcher ( co.desktop) mit Exec=/home/user/.scripts/Customization/Defaultapps/custom-open-textin ~ / .local / share / applications. 2.) Bearbeiten ./local/share/applications/mimeapps.listund fügen Sie die folgende Standardzuordnung hinzu : text/plain=co.desktop. Finden Sie Fehler in diesem Verfahren?
Glutanimate
1
OK, probieren Sie die neue Version aus. Ich habe einige Verbesserungen vorgenommen, um die Verwendung zu vereinfachen. Ich habe auch die grafische Fehlerbehandlungsroutine hinzugefügt, sodass jetzt eine Warnung mit der Fehlermeldung angezeigt werden sollte. Versuchen Sie es erneut und schreiben Sie die Fehlermeldung in einen Kommentar, wenn dies immer noch nicht funktioniert. Könnten Sie auch erwähnen, welche Ubuntu-Version und welche Desktop-Umgebung Sie ausprobiert haben?
Marwan Alsabbagh
Es funktioniert und es funktioniert fantastisch (mit LXDE / Unity)! Ihre Lösung verdient jeden letzten Punkt dieser Prämie. Vielen Dank, dass Sie sich die Zeit dafür genommen haben. (PS: Ich denke immer noch, dass eine Funktion wie diese standardmäßig mit Ubuntu geliefert werden sollte. DE-Hopping ist vielleicht keine gängige Praxis, aber es ist üblich genug, um eine offizielle Lösung zu rechtfertigen.)
Glutanimate
1
Es tut mir leid, aber ich bin nicht der OP, ich habe nur das Kopfgeld eingerichtet. @Olive Twist muss seine eigene Frage als beantwortet markieren.
Glutanimate
2

Wenn Sie nicht den "richtigen" Weg finden, können Sie eine Brute-Force-Methode wie die folgende anwenden:

  1. Legen Sie alle Standardeinstellungen in einer Desktop-Umgebung fest
  2. Machen Sie so etwas wie ein cd $HOME;ls -Rlrt | less, um herauszufinden, welche Dateien gerade aktualisiert wurden - dh wo diese Auswahlmöglichkeiten gespeichert wurden
  3. Erstellen Sie für jede Desktop-Umgebung eine separate Kopie dieser Dateien (gesichert).
  4. Wiederholen Sie dies für jede Desktop-Umgebung
  5. Kopieren Sie den entsprechenden Satz unmittelbar vor dem Wechsel zu dieser Desktop-Umgebung (wahrscheinlich durch Abmelden und erneutes Anmelden und Auswählen der neuen Desktop-Umgebung).

Hoffentlich gibt es eine Möglichkeit, Desktop-Umgebungen von einem Shell-Skript aus zu wechseln, mit der Option, der Desktop-Umgebung mitzuteilen, woher sie ihre Konfigurationsdateien bezieht. Das ist vielleicht sauberer als das ständige Verschieben von Dateien, aber ich habe nicht untersucht, ob oder wie das funktioniert.

Eine andere, viel einfachere Lösung, aber nicht genau das, wonach Sie gefragt haben, wäre einfach:

  1. Erstellen Sie separate Benutzerkonten für jede Desktop-Umgebung
  2. Erstellen Sie eine neue Gruppe für diese Benutzer
  3. Fügen Sie alle diese Benutzer der neuen Gruppe hinzu
  4. Erstellen Sie alle gängigen Datendateien, auf die Sie von all diesen Benutzern zugreifen müssen -rwxrwxr-x ( chmod 775 list-of-files-and-directories). Auf diese Weise erhalten Sie keine Berechtigungsfehler beim Versuch, in eine Datei zu schreiben, in die ein anderer Ihrer "Benutzer" zuerst geschrieben hat.

    • Wenn Sie möchten, dass einige Dateien für alle diese Benutzer gleich sind, können Sie sie in einem Benutzer erstellen und mit den anderen verknüpfen. Dies sollte funktionieren, erfordert jedoch, dass Sie sich daran erinnern, dass sie so eingerichtet sind, wenn Sie sie ändern. Wenn Sie beispielsweise eine davon bearbeiten und Ihr Editor eine Sicherungsdatei erstellt, wird diese Sicherungsdatei nur dort gespeichert, wo Sie sie bearbeitet haben, nicht auf allen anderen Benutzerkonten.
Joe
quelle
Sie können feststellen, wo pro Benutzer Dateizuordnungen gespeichert sind~/.local/share/mime/
RobotHumans