Файл .desktop не открывается в Google Chrome при запуске из SpaceFm

При использовании Google Chrome я часто перетаскиваю ссылки на веб-сайты из адресной строки в папку на рабочем столе для дальнейшего использования. Это создает файл .desktop, который по сути является ссылкой на веб-страницу.

Эти файлы рабочего стола можно легко открыть из Nautilus & PCmanFM, просто дважды щелкнув по ним, чтобы открыть их, однако, когда я открываю их с помощью файлового менеджера SpaceFM, Google Chrome начинает загружать файл, а не открывать его следующим образом: это происходит с другими упомянутыми файловыми менеджерами.

Я могу открыть эти файлы через SpaceFM, если щелкнуть их правой кнопкой мыши и открыть с помощью Firefox, но не в 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
задан 6 May 2016 в 14:01

1 ответ

1. Преобразуйте файлы связей в средства запуска

Решение ниже предлагает опцию щелкнуть правой кнопкой по ссылке (.desktop файл), и выбирают>, "Выполняются", который будет работать Google-Chrome открыть ссылку. Путем редактирования SpaceFmнастройки, можно выполнить ссылку двойным щелчком также (см. примечания [3]).

enter image description here

Обратите внимание, что решение автоматически редактирует (только) новые ссылки на Ваш рабочий стол, для выполнения ссылки конкретно с Google-Chrome

Каково это

Маленький фоновый сценарий проверяет однажды в две секунды для нового .desktop файлы на Вашем Рабочем столе. Если соответствующий файл найден, файл редактируется от Файла связей в Файл приложения. Это сделано путем редактирования двух строк в файле:

  • Строка:

    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. В голове - раздел Вашего сценария, отредактируйте путь к своему Рабочему столу (как упомянуто, используйте полный путь здесь),
  3. Проверьте команду для выполнения Google-Chrome (также установленный в голове - раздел) путем проверки первого Exec= строка в google-chrome.desktop файл: выполненный

    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 файл (ссылка) должен быть на Вашем Рабочем столе по крайней мере одной-двумя секундами, которые будут найдены и отредактированы, поэтому если Вы перемещаете ссылки, по крайней мере, оставляете их в течение нескольких секунд на Вашем Рабочем столе.:)
  2. ll, который делает сценарий, проверить на новый .desktop файлы на Вашем Рабочем столе, это только читает/редактирует файл (файлы), если существуют новые файлы. Это ничего не значит для Вашей системы.
  3. Путем редактирования SpaceFmнастройки, Вы можете alsu выполнять "ссылку" двойным щелчком:

    enter image description here

Преобразуйте свои существующие файлы связей рекурсивно

Кроме того, как обсуждено в чате, сценарий для выполнения единственного времени для преобразования ссылок в каталоге рекурсивно:

#!/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
ответ дан 7 May 2016 в 00:01
  • 1
    Спасибо, просто видел этот ответ. Я don' t вполне видят, почему Ваш многоступенчатый процесс копирования двоичных файлов и заголовков необходим, по сравнению с моим обходным решением -nostdinc++ -cxx-isystem=.... Вы просто описываете различную ситуацию на другом распределении? – Lack 6 May 2018 в 10:35

Другие вопросы по тегам:

Похожие вопросы: