Настройка разных приложений по умолчанию для разных сред рабочего стола

9

Я использую Ubuntu 12.04 с интерфейсом Unity по умолчанию. Позже я установил рабочий стол KDE, XFCE, LXDE, gnome-shell и Cinnamon.

KDE поставляется с приложениями по умолчанию, отличными от Unity, такими как

  • kwrite для редактирования текста,
  • konsole как виртуальный терминал,
  • kfontview для просмотра и установки шрифта,
  • dolphin как файловый браузер и т. д.

Другие DE поставляются с некоторыми другими приложениями по умолчанию.

Проблема возникает, когда вы хотите открыть файл, такой как текстовый файл, который можно открыть с помощью geditи kwrite, я хочу использовать kwriteв KDE и geditв Unity или Gnome. Но нет способа установить так. Я могу установить приложение по умолчанию для текстового файла, изменив соответствующие настройки как в KDE, так и в Unity, но оно станет по умолчанию для обоих DE.

Например, если я устанавливаю приложение kfontviewerпо умолчанию для просмотра шрифтов в KDE, оно также открывает шрифты, когда я нахожусь в Unity или Gnome, и наоборот. Это проблема, потому что загрузка другой программы DE занимает больше времени, чем по умолчанию для используемой DE.

У меня вопрос: могу ли я использовать разные приложения по умолчанию для разных DE? Как?

Анвар
источник

Ответы:

5

Я собрал это решение, чтобы решить вашу проблему, и протестировал его на KDE и XFCE с открытием текстовых файлов и файлов шрифтов. Это универсальное решение, которое должно быть применимо к любому количеству сред рабочего стола и типов MIME. Это работает так: есть простой скрипт на python, называемый custom-open, который открывает файл с использованием разных приложений для разных сред рабочего стола. Вот шаги для настройки решения:

  1. сохраняйте пользовательский скрипт на вашем компьютере, желательно на вашем пути, но это не обязательно.
  2. сохраните .custom-open.ini в вашем домашнем каталоге ~ / .custom-open.ini
  3. установите custom-open в качестве приложения по умолчанию для любых типов файлов, которые вы хотите обрабатывать.

заказ открыт

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

Итак, что хорошо в этом решении, так это то, что вы можете добавить столько новых сред рабочего стола, сколько захотите, и столько типов mime, сколько захотите. чтобы проверить, какое имя вы должны указать для окружения рабочего стола, запустите приведенную ниже команду в терминале.

env | grep -i DESKTOP_SESSION

чтобы проверить точный тип MIME файла, просто запустите:

file --mime-type filename

Отредактировано: необходимость в символических ссылках была удалена, это должно облегчить использование. Я также добавил графический обработчик ошибок, который выдает предупреждение при возникновении ошибки.

Марван Алсаббах
источник
1
Спасибо за ваш ответ. Я следовал вашим шагам и создал все соответствующие скрипты, ссылки и файлы. Ваше решение прекрасно работает из командной строки и работает как рекламируется. Но когда я пытаюсь установить сценарий (или, скорее, символическую ссылку) в качестве приложения по умолчанию для открытия файла определенного типа, он завершается неудачно и возвращается к дополнительному значению по умолчанию. Я не знаю, делаю ли я что-то не так.
Glutanimate
Вот как я определил сценарий как приложение по умолчанию: 1.) создать модуль запуска ( co.desktop) с помощью Exec=/home/user/.scripts/Customization/Defaultapps/custom-open-text~ / .local / share / apps. 2.) Редактировать ./local/share/applications/mimeapps.listи добавьте следующую ассоциацию по умолчанию: text/plain=co.desktop. Найти какие-либо ошибки в этой процедуре?
Glutanimate
1
Хорошо, попробуйте новую версию, я сделал несколько улучшений, чтобы упростить использование. Я также добавил графический обработчик ошибок, поэтому теперь он должен выдавать предупреждение с сообщением об ошибке. Попробуйте еще раз и опубликуйте сообщение об ошибке в комментарии, если оно все еще не работает. Также не могли бы вы указать, какую версию Ubuntu и какую среду рабочего стола вы опробовали.
Марван Алсаббах
Это работает и делает это фантастически (используя LXDE / Unity)! Ваше решение заслуживает каждого последнего пункта этой награды. Большое спасибо, что нашли время, чтобы сделать это. (PS: я все еще думаю, что подобная функция по умолчанию должна поставляться с Ubuntu. DE-hopping может быть не популярной практикой, но достаточно распространен, чтобы
требовать
1
Прошу прощения, но я не ОП, я просто назначил награду. @Olive Twist должен будет отметить свой вопрос как ответивший.
Glutanimate
2

Если вы не найдете «правильный» способ сделать это, вы можете использовать метод грубой силы что-то вроде:

  1. Установите все значения по умолчанию в одной среде рабочего стола
  2. Сделайте что-то вроде an, cd $HOME;ls -Rlrt | lessчтобы узнать, какие файлы были только что обновлены - то есть, где были сохранены эти варианты
  3. Сделайте отдельную копию этих файлов для каждой среды рабочего стола (резервное копирование).
  4. Повторите для каждого рабочего стола
  5. Скопируйте соответствующий набор на место непосредственно перед переключением в эту среду рабочего стола (возможно, выйдя из системы, войдя обратно и выбрав новую среду рабочего стола).

Надеемся, что есть способ переключать среды рабочего стола из сценария оболочки с возможностью указать среде рабочего стола, откуда взять файлы конфигурации. Это может быть чище, чем постоянно перемещать файлы, но я не исследовал, работает ли это или нет.

Другое, гораздо более простое решение, но не совсем то, что вы просили, было бы просто:

  1. Создайте отдельные учетные записи пользователей для каждой среды рабочего стола
  2. Создать новую группу для этих пользователей
  3. Добавить всех этих пользователей в новую группу
  4. Создайте любые общие файлы данных, к которым вам нужен доступ от всех этих пользователей -rwxrwxr-x ( chmod 775 list-of-files-and-directories). Таким образом, вы не получите ошибок прав доступа при попытке записи в файл, который вначале записал другой из ваших «пользователей».

    • Если вы хотите, чтобы некоторые файлы были одинаковыми для всех этих пользователей, вы можете создать их у одного пользователя и сопоставить их с остальными. Это должно сработать, но вам нужно будет помнить, что они настроены таким образом, когда вы меняете любой из них. Например, если вы отредактируете один из них, и ваш редактор создаст файл резервной копии, этот файл резервной копии будет сохранен только там, где вы его отредактировали, а не на всех других учетных записях пользователей.
Джо
источник
Вы можете заметить, где хранятся ассоциации файлов для каждого пользователя~/.local/share/mime/
RobotHumans