使用 Google Chrome 时,我经常将网站链接从地址栏拖到桌面上的文件夹中,以供日后参考。这会创建一个.desktop
文件,该文件本质上是指向网页的链接。
只需双击即可从 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
文件在从 SpaceFM 浏览器启动时在 Google Chrome 中正常打开?
答案1
1. 将链接文件转换为启动器
以下解决方案提供了右键单击链接(.desktop
文件)并选择 >“执行”的选项,这将运行Google-Chrome
以打开链接。通过编辑SpaceFm
的设置,您也可以通过双击来运行链接(参见注释[3]
)。
注意,解决方案会自动編輯(仅有的)新的桌面上的链接,专门运行链接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
如何使用
- 将脚本复制到一个空文件中,另存为
edit_links.py
- 在脚本的头部部分,编辑桌面的路径(如上所述,这里使用绝对路径)
通过检查文件中的第一行来检查要运行的命令
Google-Chrome
(也在 head- 部分设置):运行Exec=
google-chrome.desktop
gedit /usr/share/applications/google-chrome.desktop
读取文件。
通过以下命令测试运行脚本:
python3 /path/to/edit_links.py
打开
Google-Chrome
,将链接拖到桌面上,几秒钟后测试是否正常工作。如果一切正常,请将其添加到启动应用程序:Dash > 启动应用程序 > 添加。添加命令:
python3 /path/to/edit_links.py
笔记
- 拖动的
.desktop
文件(链接)需要在桌面上停留至少一到两秒钟才能被发现和编辑,因此如果您移动链接,至少要将它们在桌面上保留几秒钟。:) - 该脚本所做的就是检查
.desktop
桌面上是否有新文件,只有在有新文件时才会读取/编辑文件。这意味着没有什么到您的系统。 通过编辑
SpaceFm
的设置,您还可以双击运行“链接”:
递归转换现有链接文件
此外,正如聊天中所讨论的,运行一次脚本可以递归地转换目录中的链接:
#!/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>
笔记
此版本基于这个很好的答案在超级用户上创建跨平台链接。