web-dev-qa-db-ja.com

.desktopファイルがGoogleで開かないChrome SpaceFmから起動したとき

Googleを使用している間、Chrome後で参照するために、Webサイトのリンクをアドレスバーからデスクトップ上のフォルダーにドラッグすることがよくあります。これにより、.desktopファイルは、本質的にWebページへのリンクです。

これらのデスクトップファイルは、ダブルクリックして開くだけでNautilus&PCmanFMから簡単に開くことができますが、SpaceFMファイルマネージャーを使用して開くと、Google Chromeではなくファイルのダウンロードが開始されます他の前述のファイルマネージャーで行うように開きます。

これらのファイルを右クリックしてFirefoxで開くと、SpaceFMで開くことができますが、Google Chromeでは開きません。

デスクトップファイルの例は次のとおりです。

[Desktop Entry]
Encoding=UTF-8
Name=Link to The Hidden Fortress (1958) - IMDb
Type=Link
URL=http://www.imdb.com/title/tt0051808/?ref_=nv_sr_2
Icon=text-html

これらを作成する方法はありますか.desktopファイルをGoogleで開くChrome SpaceFMブラウザーから起動した場合、通常は?

3
Kalamalka Kid

1.リンクファイルをランチャーに変換する

以下のソリューションでは、リンク(.desktopファイル)を右クリックして[実行]を選択し、Google-Chromeを実行してリンクを開くオプションを提供しています。 SpaceFmの設定を編集することにより、ダブルクリックでもリンクを実行できます(注[3]を参照)。

enter image description here

ソリューションは自動的に編集(のみ)デスクトップ上のnewリンクを編集し、Google-Chromeで具体的にリンクを実行します。

それは何ですか

小さなバックグラウンドスクリプトは、デスクトップ上のnew.desktopファイルを2秒に1回チェックします。関連するファイルが見つかった場合、ファイルはLinkファイルからApplicationファイルに編集されます。これは、ファイル内の2行を編集することにより行われます。

  • この線:

    Type=Link
    

    次のように変更されます。

    Type=Application
    
  • この線:

    URL=<link>
    

    次のように変更されます。

    Exec=/usr/bin/google-chrome-stable <link>
    

実行したテストでは、SpaceFmを右クリックしてリンクを「開く」ことができます。右クリック> [開く]> [実行]

スクリプト

#!/usr/bin/env python3
import os
import time

# --- define the (absolute) path to your desktop below
dr = "/absolute/path/to/your/desktop"
# edit (if necessary) the command to launch Google-Chrome
application = "/usr/bin/google-chrome-stable"

def find_relevant():
    return [f for f in os.listdir(dr) if f.endswith(".desktop")]

relevant1 = []

while True:
    time.sleep(2)
    relevant2 = [f for f in os.listdir(dr) if f.endswith(".desktop")]
    new = [f for f in relevant2 if not f in relevant1]
    if new:
        for f in new:
            f = dr+"/"+f
            rewrite = False
            lines = [l.strip() for l in open(f).readlines()]
            for i, l in enumerate(lines):
                if l.startswith("Type=Link"):
                    rewrite = True
                    lines[i] = "Type=Application"
                Elif l.startswith("URL="):
                    lines[i] = l.replace("URL=", "Exec="+application+" ")
            if rewrite == True:
                print("rewrite")
                open(f, "wt").write(("\n").join(lines))            
    relevant1 = relevant2

使い方

  1. スクリプトを空のファイルにコピーし、edit_links.pyとして保存します
  2. スクリプトのheadセクションで、デスクトップへのパスを編集します(前述のとおり、ここでは絶対パスを使用します)
  3. Google-Chromeファイルの最初のExec=行をチェックして、google-chrome.desktop(ヘッドセクションでも設定)を実行するコマンドを確認します:run

    gedit /usr/share/applications/google-chrome.desktop
    

    ファイルを読み取ります。

  4. 次のコマンドでスクリプトをテスト実行します。

    python3 /path/to/edit_links.py
    

    Google-Chromeを開き、リンクをデスクトップにドラッグし、数秒後に正常に動作するかテストします。

  5. すべてが正常に機能する場合は、スタートアップアプリケーションに追加します:ダッシュ>スタートアップアプリケーション>追加コマンドを追加します。

    python3 /path/to/edit_links.py
    

注意

  1. ドラッグされた.desktopファイル(リンク)は、少なくとも1〜2秒デスクトップ上に存在する必要があります。そのため、リンクを移動する場合は、少なくとも数秒間デスクトップに残してください。 :)
  2. スクリプトは、デスクトップ上の新しい.desktopファイルをチェックし、新しいファイルがある場合にのみファイルを読み取り/編集します。これは、システムに対してnothingを意味します。
  3. SpaceFmの設定を編集することにより、ダブルクリックで「リンク」を実行することもできます。

    enter image description here

既存のリンクファイルを再帰的に変換する

さらに、チャットで説明したように、ディレクトリ内のリンクを再帰的に変換するために1回実行するスクリプト:

#!/usr/bin/env python3
import os
import sys

# --- define the (absolute) path to your desktop below
dr = sys.argv[1]
# edit (if necessary) the command to launch Google-Chrome
application = "/usr/bin/google-chrome-stable"

for root, dirs, files in os.walk(dr):
    for f in files:
        if f.endswith(".desktop"):
            f = root+"/"+f
            rewrite = False
            lines = [l.strip() for l in open(f).readlines()]
            for i, l in enumerate(lines):
                if l.startswith("Type=Link"):
                    rewrite = True
                    lines[i] = "Type=Application"
                Elif l.startswith("URL="):
                    lines[i] = l.replace("URL=", "Exec="+application+" ")
            if rewrite == True:
                open(f, "wt").write(("\n").join(lines)) 

使用するには、convert_links.pyとして保存し、ターゲットディレクトリを引数として実行します。

python3 /path/to/convert_links.py <directory>

2.リンクをクロスプラットフォームで使用可能なリンクファイルに変換する

OPの要求に応じて、(最初の)(バックグラウンド)スクリプトのバージョンの下で、ブラウザーからデスクトップにリンクをドラッグして作成されたリンクファイルをクロスプラットフォームリンク。使用方法は、最初のセクションで説明したとおりです。

スクリプト

#!/usr/bin/env python3
import os
import time

# --- define the (absolute) path to your desktop below
dr = "/absolute/path/to/your/desktop"

out1 = ["<html>", "<body>", '<script type="text/javascript">']
out2 = ["</script>", "</body>", "</html>"]

def find_relevant():
    return [f for f in os.listdir(dr) if f.endswith(".desktop")]

relevant1 = []

while True:
    time.sleep(2)
    relevant2 = [f for f in os.listdir(dr) if f.endswith(".desktop")]
    new = [f for f in relevant2 if not f in relevant1]
    if new:
        for f in new:
            f = dr+"/"+f
            rewrite = False
            lines = [l.strip() for l in open(f).readlines()]
            for i, l in enumerate(lines):
                if l.startswith("Type=Link"):
                    rewrite = True
                Elif l.startswith("URL="): 
                    url = 'window.location.href = "'+l.replace("URL=", "")+'"'
                    out1.append(url)
                Elif l.startswith("Name="):
                    name = l.replace("Name=", "")
            if rewrite == True:
                open(f.replace(".desktop", ".html"), "wt").write(("\n").join(out1+out2))
                os.remove(f)
    relevant1 = relevant2

再帰ディレクトリ内の既存のリンクを変換するバージョン(シングルラン)

#!/usr/bin/env python3
import os
import sys

dr = sys.argv[1]

out1 = ["<html>", "<body>", '<script type="text/javascript">']
out2 = ["</script>", "</body>", "</html>"]

for root, dirs, files in os.walk(dr):
    for f in files:
        if f.endswith(".desktop"):
            f = root+"/"+f
            rewrite = False
            lines = [l.strip() for l in open(f).readlines()]
            for i, l in enumerate(lines):
                if l.startswith("Type=Link"):
                    rewrite = True
                Elif l.startswith("URL="): 
                    url = 'window.location.href = "'+l.replace("URL=", "")+'"'
                    out1.append(url)
                Elif l.startswith("Name="):
                    name = l.replace("Name=", "")
            if rewrite == True:
                open(f.replace(".desktop", ".html"), "wt").write(("\n").join(out1+out2))
                os.remove(f)

使用するには、convert_links.pyとして保存し、ターゲットディレクトリを引数として実行します。

python3 /path/to/convert_links.py <directory>

注意

このバージョンは、クロスプラットフォームリンクを作成するためのスーパーユーザーの この素敵な答え に基づいています。

1
Jacob Vlijm