Ustawianie różnych domyślnych aplikacji dla różnych środowisk pulpitu

9

Używam Ubuntu 12.04 z domyślnym interfejsem Unity. Zainstalowałem później pulpit KDE, XFCE, LXDE, gnome-shell i Cinnamon.

KDE zawiera inne domyślne aplikacje niż Unity, takie jak

  • kwrite do edycji tekstu,
  • konsole jako terminal wirtualny
  • kfontview do przeglądania i instalacji czcionek,
  • dolphin jako przeglądarka plików itp.

Inne DE są dostarczane z innymi domyślnymi aplikacjami.

Problem pojawia się, gdy chcesz otworzyć plik, taki jak plik tekstowy, przy pomocy którego można go otworzyć zarówno przez, jak gediti kwritechcę użyć kwritena KDE i geditna Unity lub Gnome. Ale nie da się tego ustawić. Mogę ustawić domyślną aplikację dla pliku tekstowego, zmieniając odpowiednie ustawienia zarówno w KDE, jak i Unity, ale staje się ono domyślne dla obu DE.

Na przykład, jeśli ustawię kfontviewerjako domyślną aplikację do przeglądania czcionek w KDE, otworzy ona również czcionki, gdy jestem w Unity lub Gnome i odwrotnie. Jest to problem, ponieważ ładowanie innego programu DE zajmuje dużo czasu niż domyślny dla używanego programu DE.

Moje pytanie brzmi: czy mogę używać różnych domyślnych aplikacji dla różnych DE? W jaki sposób?

Anwar
źródło

Odpowiedzi:

5

Złożyłem to rozwiązanie, aby rozwiązać problem, i przetestowałem je na KDE i XFCE z otwieraniem plików tekstowych i plików czcionek. Jest to ogólne rozwiązanie, które powinno mieć zastosowanie do dowolnej liczby środowisk pulpitu i typów MIME. Działa w ten sposób, że istnieje prosty skrypt Pythona o nazwie custom-open, który otworzy plik przy użyciu różnych aplikacji dla różnych środowisk pulpitu. Oto kroki, aby skonfigurować rozwiązanie:

  1. zapisz niestandardowo otwarty skrypt na swoim komputerze, najlepiej na swojej ścieżce, ale nie musi tak być.
  2. zapisz .custom-open.ini w swoim katalogu domowym ~ / .custom-open.ini
  3. ustaw niestandardowe otwieranie jako domyślną aplikację dla wszystkich typów plików, które mają być obsługiwane.

niestandardowe otwarcie

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

więc świetne w tym rozwiązaniu jest to, że możesz dodać dowolną liczbę nowych środowisk pulpitu i dowolną liczbę typów MIME. aby sprawdzić, jaką nazwę powinieneś podać w środowisku pulpitu, uruchom poniższe polecenie w terminalu.

env | grep -i DESKTOP_SESSION

aby sprawdzić dokładny typ MIME pliku, po prostu uruchom:

file --mime-type filename

EDYCJA: Usunięto potrzebę linków symbolicznych, co powinno ułatwić korzystanie z niej. Dodałem również graficzną procedurę obsługi błędów, która wyświetli ostrzeżenie w przypadku wystąpienia błędu.

Marwan Alsabbagh
źródło
1
Dziękuję za Twoją odpowiedź. Śledziłem twoje kroki i stworzyłem wszystkie odpowiednie skrypty, linki i pliki. Twoje rozwiązanie działa świetnie z wiersza poleceń i działa zgodnie z reklamą. Ale kiedy próbuję ustawić skrypt (a raczej łącze symboliczne) jako domyślną aplikację do otwierania określonego typu pliku, nie działa i wraca do domyślnej wartości domyślnej. Nie wiem, czy robię coś źle.
Glutanimate
Oto jak zdefiniowałem skrypt jako domyślną aplikację: 1.) utwórz program uruchamiający ( co.desktop) Exec=/home/user/.scripts/Customization/Defaultapps/custom-open-textw ~ / .local / share / applications. 2.) Edycja ./local/share/applications/mimeapps.listi dodaj następującą domyślną stowarzyszenie: text/plain=co.desktop. Znajdź jakieś błędy w tej procedurze?
Glutanimate
1
ok wypróbuj nową wersję, wprowadziłem kilka ulepszeń, aby była łatwiejsza w użyciu. Dodałem również graficzną procedurę obsługi błędów, więc teraz powinna wyświetlić wyskakujące ostrzeżenie z komunikatem o błędzie. Spróbuj ponownie i opublikuj komunikat o błędzie w komentarzu, jeśli nadal nie działa. Czy mógłbyś również wspomnieć, jaką wersję Ubuntu i jakie środowisko pulpitu wypróbowałeś.
Marwan Alsabbagh
Działa i robi to fantastycznie (przy użyciu LXDE / Unity)! Twoje rozwiązanie zasługuje na każdy ostatni punkt tej nagrody. Dziękuję bardzo za poświęcenie czasu na zrobienie tego. (PS: Nadal uważam, że taka funkcja powinna domyślnie być dostarczana z Ubuntu.
Skoki
1
Przykro mi, ale nie jestem PO, po prostu ustalam nagrodę. @Olive Twist będzie musiał zaznaczyć swoje własne pytanie jako odpowiedź.
Glutanimate,
2

Jeśli nie znajdziesz „właściwej” metody, możesz użyć metody brutalnej siły, takiej jak:

  1. Ustaw wszystkie wartości domyślne w jednym środowisku pulpitu
  2. Zrób coś takiego, cd $HOME;ls -Rlrt | lessaby dowiedzieć się, które pliki zostały właśnie zaktualizowane - tj. Gdzie zostały zapisane te wybory
  3. Utwórz osobną kopię tych plików dla każdego środowiska pulpitu (kopia zapasowa).
  4. Powtórz dla każdego środowiska pulpitu
  5. Skopiuj odpowiedni zestaw na miejsce tuż przed przejściem do tego środowiska pulpitu (prawdopodobnie poprzez wylogowanie i ponowne zalogowanie się i wybranie nowego środowiska pulpitu).

Mamy nadzieję, że istnieje sposób na przełączenie środowisk pulpitu ze skryptu powłoki z opcją poinformowania środowiska pulpitu, skąd pobrać pliki konfiguracyjne. To może być czystsze niż przenoszenie plików przez cały czas, ale nie badałem, czy i jak to działa.

Innym, znacznie prostszym rozwiązaniem, ale nie dokładnie tym, o co prosiłeś, byłoby po prostu:

  1. Utwórz osobne konta użytkowników dla każdego środowiska pulpitu
  2. Utwórz nową grupę dla tych użytkowników
  3. Dodaj wszystkich tych użytkowników do nowej grupy
  4. Utwórz wszystkie wspólne pliki danych, do których musisz uzyskać dostęp od wszystkich tych użytkowników -rwxrwxr-x ( chmod 775 list-of-files-and-directories). W ten sposób nie będziesz mieć błędów uprawnień podczas próby zapisu do pliku, do którego inny z twoich „użytkowników” najpierw napisał.

    • Jeśli chcesz, aby niektóre pliki były takie same dla wszystkich tych użytkowników, możesz je utworzyć u jednego użytkownika i dowiązać symbolicznie do reszty. Powinno to działać, ale wymagać będzie zapamiętania, że ​​są skonfigurowane w ten sposób po zmianie któregokolwiek z nich. Na przykład, jeśli edytujesz jeden z nich, a Twój edytor tworzy plik kopii zapasowej, ten plik kopii zapasowej zostanie zapisany tylko tam, gdzie go edytowałeś, a nie na wszystkich innych kontach użytkowników.
Joe
źródło
Można zauważyć, gdzie przechowywane są skojarzenia plików użytkownika~/.local/share/mime/
RobotHumans