为不同的桌面环境设置不同的默认应用程序

为不同的桌面环境设置不同的默认应用程序

我使用的是带有默认 Unity 界面的 Ubuntu 12.04。后来我安装了 KDE 桌面、XFCE、LXDE、gnome-shell 和 Cinnamon。

KDE 自带的默认应用程序与 Unity 有所不同,例如

  • kwrite对于文本编辑,
  • konsole作为虚拟终端,
  • kfontview用于字体查看和安装,
  • dolphin如文件浏览器等。

其他 DE 附带一些其他默认应用程序。

gedit当您想要打开一个文件(例如文本文件)时,就会出现问题,而和都可以打开它kwrite,我想kwrite在 KDE 和geditUnity 或 Gnome 上使用。但是,没有办法这样设置。我可以通过更改 KDE 和 Unity 中的相应设置来设置文本文件的默认应用程序,但它成为两个 DE 的默认应用程序。

例如,如果我kfontviewer在 KDE 中将其设置为默认字体查看应用程序,那么当我在 Unity 或 Gnome 中时它也会打开字体,反之亦然。这是一个问题,因为加载其他 DE 的程序比加载所用 DE 的默认程序花费的时间更长。

我的问题是:我可以为不同的 DE 使用不同的默认应用程序吗?怎样做?

答案1

我整理了这个解决方案来解决您的问题,并在 KDE 和 XFCE 上通过打开文本文件和字体文件对其进行了测试。这是一个通用解决方案,应该适用于任何数量的桌面环境和 MIME 类型。它的工作方式是,有一个名为 custom-open 的简单 Python 脚本,它将使用针对不同桌面环境的不同应用程序打开文件。以下是设置解决方案的步骤:

  1. 最好将自定义打开脚本保存在您的计算机上,放在您的路径上,但不一定非要这样。
  2. 将 .custom-open.ini 保存到您的主目录 ~/.custom-open.ini
  3. 将自定义打开设置为您想要处理的任何文件类型的默认应用程序。

定制开放

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

.自定义-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

編輯:符号链接的需要已被消除,这将使它更易于使用。我还添加了一个图形错误处理程序,如果发生错误,它将发出警报。

答案2

如果你找不到“正确”的方法来做到这一点,你可以使用强力方法,例如:

  1. 在一个桌面环境中设置所有默认设置
  2. 执行类似操作cd $HOME;ls -Rlrt | less来找出刚刚更新的文件 - 即这些选择保存在哪里
  3. 为每个桌面环境制作这些文件的单独副本(备份)。
  4. 对每个桌面环境重复此操作
  5. 在切换到该桌面环境之前将适当的集合复制到位(可能通过注销并重新登录并选择新的桌面环境)。

希望有一种方法可以通过 shell 脚本切换桌面环境,并且可以选择告诉桌面环境从哪里获取其配置文件。这可能比一直移动文件更干净,但我还没有研究过它是否有效或如何有效。

另一个更简单的解决方案(但不完全符合您的要求)是:

  1. 为每个桌面环境创建单独的用户帐户
  2. 为这些用户创建新组
  3. 将所有这些用户添加到新组
  4. 将您需要访问的任何公共数据文件设置为仅对所有这些用户开放-rwxrwxr-x ( chmod 775 list-of-files-and-directories)。这样,您在尝试写入另一个“用户”先写入的文件时就不会出现权限错误。

    • 如果您希望某些文件在所有这些用户中都相同,您可以在一个用户中创建它们,并将它们符号链接到其余文件。这应该可行,但需要您在更改任何文件时记住它们是按这种方式设置的。例如,如果您编辑其中一个文件并且您的编辑器创建了备份文件,则该备份文件将仅保存在您编辑它的位置,而不是保存在所有其他用户帐户中。

相关内容