web-dev-qa-db-ja.com

デスクトップ環境ごとに異なるデフォルトアプリケーションを設定する

デフォルトのUnityインターフェースでUbuntu 12.04を使用しています。後でKDEデスクトップ、XFCE、LXDE、gnome-Shell、Cinnamonをインストールしました。

KDEには、Unityとは異なるデフォルトアプリケーションが付属しています。

  • テキスト編集用のkwrite
  • konsoleは仮想端末として、
  • フォントの表示およびインストール用のkfontview
  • dolphin as File browserなど。

他のDEには、他のいくつかのデフォルトアプリケーションが付属しています。

この問題は、geditkwriteの両方で開くことができるテキストファイルなどのファイルを開くときに発生します。KDEではkwriteを使用し、UnityまたはGnomeではgeditを使用します。しかし、このように設定する方法はありません。 KDEとUnityの両方でそれぞれの設定を変更することで、テキストファイルのデフォルトアプリケーションを設定できますが、DEの両方でデフォルトになります。

たとえば、kfontviewerをKDEのデフォルトのフォント表示アプリケーションとして設定した場合、UnityまたはGnomeを使用しているとき(およびその逆の場合)もフォントを開きます。これは問題です。なぜなら、他のDEのプログラムのロードには、使用されているDEのデフォルトのプログラムよりも長い時間がかかるからです。

私の質問は、DEごとに異なるデフォルトアプリケーションを使用できますか?どうやって?

9
Anwar

この解決策をまとめて問題を解決し、テキストファイルとフォントファイルを開いてKDEとXFCEでテストしました。これは、任意の数のデスクトップ環境とMIMEタイプに適用できる一般的なソリューションです。動作方法は、デスクトップ環境ごとに異なるアプリケーションを使用してファイルを開くcustom-openと呼ばれる単純なpythonスクリプトがあります。ソリューションをセットアップする手順は次のとおりです。

  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

編集済みシンボリックリンクの必要性がなくなり、使いやすくなりました。また、エラーが発生した場合にアラートを表示するグラフィカルなエラーハンドラも追加しました。

5

それを行うための「正しい」方法が見つからない場合、次のようなブルー​​トフォースメソッドを使用できます。

  1. 1つのデスクトップ環境ですべてのデフォルトを設定します
  2. cd $HOME;ls -Rlrt | lessのようなことをして、更新されたばかりのファイル、つまりそれらの選択が保存された場所を見つけます
  3. (バックアップされた)デスクトップ環境ごとにこれらのファイルの個別のコピーを作成します。
  4. デスクトップ環境ごとに繰り返します
  5. そのデスクトップ環境に切り替える直前に適切なセットを所定の場所にコピーします(おそらくログアウトしてから再度ログインし、新しいデスクトップ環境を選択します)。

できれば、デスクトップ環境に構成ファイルを取得する場所を指示するオプションを使用して、シェルスクリプトからデスクトップ環境を切り替える方法があります。それは常にファイルを移動するよりもクリーンかもしれませんが、私はそれがどのように機能するかを研究していません。

別のはるかに単純なソリューションですが、正確にはあなたが求めていたものではありませんが、次のようになります。

  1. デスクトップ環境ごとに個別のユーザーアカウントを作成する
  2. これらのユーザーの新しいグループを作成します
  3. これらすべてのユーザーを新しいグループに追加します
  4. これらすべてのユーザー-rwxrwxr-xchmod 775 list-of-files-and-directories)からアクセスする必要がある共通データファイルを作成します。そうすれば、別の「ユーザー」が最初に書き込んだファイルに書き込もうとしたときにアクセス権エラーが発生しなくなります。

    • 一部のファイルをこれらすべてのユーザーで同じにしたい場合は、1人のユーザーでそれらを作成し、他のユーザーにシンボリックリンクできます。これは機能するはずですが、それらのいずれかを変更する場合は、そのようにセットアップされていることを覚えておく必要があります。たとえば、それらのいずれかを編集し、エディターがバックアップファイルを作成した場合、そのバックアップファイルは他のすべてのユーザーアカウントではなく、編集した場所にのみ保存されます。
2
Joe