方法: 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 でシェル スクリプトが実行されないバグを見つけることでした。次の記事では、この問題について詳しく説明し、回避策を示しています。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日更新:

スペース (およびその他の特殊文字) を回避する方法を見つけました。まず、パラメータを URL デコードする方法を見つけました。しかし、スペース (およびその他の特殊文字) を回避するコツは、ステートメントに 'eval' を追加することであることがわかりました。そのため、スクリプトの最終ステートメントは次のようになります: eval castnow --address 192.168.0.21 --myip 192.168.0.47 $filename

ということで、以上です。残っている唯一の問題は、castnow が avi ファイルを再生できないようです。これについては github で問題を作成しました。

答え1

関連するファイル タイプに使用する既定のアプリケーションを設定できます。ビデオ ファイルを右クリックして [プロパティ] を選択し、[開く] の選択を変更して [OK] を押します。

関連情報