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


9

我正在使用具有默认Unity接口的Ubuntu 12.04。后来我安装了KDE桌面,XFCE,LXDE,gnome-shell和Cinnamon。

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

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

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

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

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

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


Answers:


5

我整理了此解决方案来解决您的问题,并在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()

.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
谢谢您的回答。我按照您的步骤操作,并创建了所有相应的脚本,链接和文件。您的解决方案可以很好地在命令行中运行,并可以像宣传的那样执行。但是,当我尝试将脚本(或符号链接)设置为打开特定文件类型的默认应用程序时,它会失败并退回到第二默认设置。我不知道我做错了什么。
谷氨酰胺

这是我将脚本定义为默认应用程序的方式:1.)在〜/ .local / share / applications中创建启动器(co.desktopExec=/home/user/.scripts/Customization/Defaultapps/custom-open-text。2.)编辑./local/share/applications/mimeapps.list并添加以下默认关联:text/plain=co.desktop。在此过程中发现任何错误?
谷氨酰胺

1
好的,尝试新版本,我进行了一些增强,使其更易于使用。我还添加了图形错误处理程序,因此现在应该弹出带有错误消息的警报。如果仍然无法正常工作,请重试并在注释中发布错误消息。还可以提及您尝试过的Ubuntu版本和桌面环境。
Marwan Alsabbagh 2012年

它的工作原理非常好(使用LXDE / Unity)!您的解决方案应得到此赏金的每一个最后一点。非常感谢您抽出宝贵的时间进行此操作。(PS:我仍然认为默认情况下,Ubuntu应该会附带这样的功能
。DE

1
很抱歉,但我不是OP,我只是设置了赏金。@Olive Twist必须将自己的问题标记为已回答。
谷氨酰胺

2

如果找不到“正确”的方法,则可以使用类似以下的蛮力方法:

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

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

另一个更简单的解决方案是:

  1. 为每个桌面环境创建单独的用户帐户
  2. 为这些用户创建一个新组
  3. 将所有这些用户添加到新组中
  4. 制作所有这些用户都需要访问的通用数据文件-rwxrwxr-xchmod 775 list-of-files-and-directories)。这样,您将不会遇到尝试写入另一个“用户”首先写入的文件的权限错误。

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

您可能会注意到每个用户文件关联的存储位置~/.local/share/mime/
RobotHumans 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.