如何:在 lubuntu 中通过 pcmanfm 执行自定义应用程序

如何:在 lubuntu 中通过 pcmanfm 执行自定义应用程序

我运行的是 Lubuntu 14.04.3 LTS,并且已经下载并安装了卡斯特诺将视频从我的 PC 传输到我的 Chromecast。
我知道的唯一替代方法是使用 Chromium 通过 Videostream 执行此操作。但这会占用太多资源,以至于我的旧笔记本电脑几乎无法承受......
我发现 castnow 工作得很好。但它是一个命令行工具,要启动它,我必须转到终端窗口并运行:

castnow --address [ip address chromecast] --myip [localip] [path to video]

这可行,但如果我可以使用文件管理器 ( ) 导航到视频pcmanfm并打开视频,我会发现它
更容易。我曾尝试创建一个脚本文件,使用选定的文件作为输入参数 (%f) 运行上述命令,但我失败了……

而我亲爱的朋友 Google 到目前为止还没能帮助我。有人能帮我完成这件事吗?

10月16日更新:

我差不多已经完成了!

花费最多时间的事情是找到 pcmanfm 中不执行 shell 脚本的 bug。以下文章很好地描述了这个问题并给出了解决方法:https://bugs.launchpad.net/ubuntu/+source/lubuntu-default-settings/+bug/975152

我创建了一个 .desktop 文件,用于执行脚本并将文件作为参数传递。这会作为菜单中的一个选项出现,这样您也可以在 pcmanfm 中选择它。

该脚本将文件名作为参数,并使用所有参数运行 castnow。不幸的是,它不起作用。

我创建的脚本如下:

filename=$1
filename=${filename:7:$((${#filename}-7))}
filename=${filename//%20/\\ }
echo castnow --address 192.168.0.21 --myip 192.168.0.47 $filename
castnow --address 192.168.0.21 --myip 192.168.0.47 $filename

结果是:

castnow --address 192.168.0.21 --myip 192.168.0.47 /home/joost/Videos/American\ Horror\ Story\ Season\ 1\ Complete\ 480p\ BZINGAZ/american.horror.story.s01e11.720p.hdtv.x264-compulsion.mkv
Error: Load failed

当我将命令复制到另一个终端窗口时,它可以正常工作。这是怎么回事?如何解决。

另一个更新:

问题似乎与路径中的空格有关。桌面文件使用 %u 参数将路径发送到 bash 脚本。由于文件夹中有一些空格,因此它们被转换为 %20 在脚本中,我将它们转换回“\”。如果我用没有空格的文件测试我的东西,它就可以正常工作(!!!)。

但空间是生活的一部分。如何解决这个问题?

另一个更新:

我做到了!虽然有点小技巧,但确实有效。我在脚本中添加了几行代码,将文件系统上的所有空格替换为下划线:

#!/bin/bash
# replace all spaces by underscores in the Videos-folders and -files:
find /home/joost/Videos/ -name "* *" -type d | rename 's/ /_/g'    # do the directories first
find /home/joost/Videos/ -name "* *" -type f | rename 's/ /_/g'
filename=$1
# remove file:// from the file-variable:
filename=${filename:7:$((${#filename}-7))}
# new films may contain spaces in the path. They have been replace by underscores. This also needs to happen in the parameter:
filename=${filename//%20/_}
# now we are ready to go:
castnow --address 192.168.0.21 --myip 192.168.0.47 $filename
read

它很有效,我很满意。但如果有人知道如何绕过这些空间,我会很高兴知道。

10月18日更新:

我已经找到了如何绕过空格(和其他特殊字符)的方法。首先,我找到了如何对参数进行 urldecode。但绕过空格(和其他特殊字符)的技巧原来是在语句中添加“eval”。所以我的脚本中的最后一条语句现在是:eval castnow --address 192.168.0.21 --myip 192.168.0.47 $filename

就这样。唯一剩下的问题是 castnow 似乎无法播放 avi 文件。我在 github 上为此创建了一个问题。

答案1

您可以设置用于相关文件类型的默认应用程序:右键单击视频文件,选择“属性”,更改“打开方式”选择,然后按确定。

相关内容