Как: выполнить пользовательское приложение из pcmanfm в lubuntu
Я запускаю Lubuntu 14.04.3 LTS, и я скачал и установил Castnow для потоковой передачи видео с моего компьютера на Chromecast.
Единственная альтернатива, которую я знаю, - это сделать это через Videostream, используя Chromium. Но это использует так много ресурсов, что мой бедный старый ноутбук с трудом справляется с этим...
Я считаю, что Castnow работает очень хорошо. Но это инструмент командной строки, и для его запуска мне нужно перейти в окно терминала и запустить:
castnow --address [ip address chromecast] --myip [localip] [path to video]
Это работает, но мне было бы намного проще, если бы я мог перейти к видео с помощью моего файлового менеджера (pcmanfm
) и откройте видео.
Я попытался создать файл сценария, который запускает указанную выше команду, используя выбранный файл в качестве входного параметра (%f), но я ошибочно ошибся...
И мой дорогой друг Google до сих пор не смог мне помочь. Может кто-нибудь помочь мне сделать это?
Обновление 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
И когда я копирую команду в другое окно терминала, она работает. Как это может быть? И как это можно решить.
Еще одно обновление:
Проблема, похоже, связана с пробелами в пути. Файл рабочего стола отправляет путь к скрипту bash с параметром% u. И поскольку в папке есть пробелы, они преобразуются в%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
Это работает, и я счастлив с этим. Но если кто-то знает, как обойти пространство, я был бы рад узнать.
Обновление 18 октября:
Я узнал, как обойти пробелы (и другие специальные символы). Прежде всего я узнал, как urldecode параматер. Но трюк, чтобы обойти пробелы (и другие специальные символы), заключается в том, чтобы добавить 'eval' в утверждение. Итак, последнее утверждение в моем сценарии теперь таково: eval castnow --адрес 192.168.0.21 --myip 192.168.0.47 $filename
Итак, это все. Единственная проблема заключается в том, что Castnow не может воспроизводить файлы AVI. Я создал проблему для этого в github.
1 ответ
Вы можете настроить приложение по умолчанию для использования с соответствующим типом файла: щелкните правой кнопкой мыши видеофайл, выберите "Свойства", измените выбор "Открыть с помощью" и нажмите ОК.