Файл рабочего стола не может запустить скрипт в терминале
Я хочу сделать кнопку на моей lxpanel, чтобы запустить программу, которая печатает Hello World!
во всплывающем окне lxterminal, поэтому я использую технику, которую я успешно реализовал ранее в Debian 7, а именно:
gedit /bin/hello.sh
(содержание ниже):#!/bin/bash echo 'Hello World!';
gedit /usr/share/applications/hello1.desktop
(ниже):[Desktop Entry] Version=1.0 Type=Application Name=Hello1 Comment=Test the terminal running a command inside it Exec=lxterminal -e "/bin/hello.sh" StartupNotify=true Icon=utilities-terminal Terminal=true Categories=Utility;
Последний я
chown
а такжеchmod
оба из приведенных выше файлов, как показано ниже:-rwxr-xr-x 1 a adm 230 1月 1 13:02 /usr/share/applications/hello1.desktop* -rwxr-xr-x 1 a adm 240 1月 1 12:57 /usr/share/applications/hello1.desktop~* -rwxr-xr-x 1 a adm 194 1月 1 12:04 /usr/share/applications/hello.desktop* -rwxr-xr-x 1 a adm 195 1月 1 12:03 /usr/share/applications/hello.desktop~* -rwxrwxr-x 1 a adm 87 1月 1 12:35 /usr/share/applications//bin/hello.sh* -rwxrwxr-x 1 a a 87 1月 1 12:25 /usr/share/applications//bin/hello.sh~* -rwxrwxr-x 1 a adm 134 12月 13 09:56 /usr/share/applications//bin/hello_world.sh*
К сожалению, что бы я ни делал, hello1.desktop
только файл может открыть пустой lxterminal, и нет вывода.
Я использую Lubuntu 14.04 и следую приведенным ниже инструкциям, чтобы связать файл рабочего стола со скриптовой программой *.sh:
- Создайте файл.desktop, который откроется и выполните команду в терминале.
- Запуск сценария на значке рабочего стола
- http://ubuntuforums.org/showthread.php?t=2194284
- http://lkubaski.wordpress.com/2012/06/29/adding-lxde-start-menu-and-desktop-shortcuts/
- http://forum.lxde.org/viewtopic.php?f=8&t=31647
- http://forum.lxde.org/viewtopic.php?f=26&t=31373
- https://bugs.launchpad.net/ubuntu/+source/lubuntu-default-settings/+bug/975152
Я также сделал следующие изменения в hello1.desktop
:
- строка 10 (последняя строка) - я тоже пробовал без точки с запятой.
- строка 9 (строка "Терминал") - пробовал "ложь"
строка 6 (строка "Exec") - пробовал это:
Exec=sh /bin/hello.sh; Exec=lxterminal -e “/bin/hello.sh” Exec=/bin/hello.sh Exec=sh -c /bin/hello.sh Exec=lxterminal -x sh -c 'echo hello' Exec=sh -c 'gnome-terminal echo hello' Exec=sh -c 'echo hello' Exec=sh /bin/hello.sh Exec=sh -c /bin/hello.sh
Но в итоге все одинаковы (кроме случаев, когда Terminal=false
в строке 9 нет терминала, очевидно).
я могу видеть hello1
под System -> Accessories, но когда я нажимаю на нее, все равно появляется только пустой экран. В Debian 7.5 LXDE wheezy это действительно легко сделать успешно, но что плохого в Lubuntu 14.04, чтобы сделать его намного сложнее?
Эндрю
1 ответ
Мне удалось продублировать вашу проблему и найти решение.
Как показало ваше исследование, вашей первоначальной проблемой было:
Terminal=true
вместе с:
Exec=lxterminal -e /bin/hello.sh
Единственная проблема в том, что при использовании:
Terminal=false
Терминал закрывается после выполнения скрипта, хотя на самом деле он запускает ваш скрипт. Поскольку ваш сценарий производит так мало результатов, по-человечески невозможно увидеть, как это происходит, поэтому он выглядит как "пустой экран".
Насколько я могу видеть (из man lxterminal
и от Google), нет конкретного способа попросить lxterminal оставаться открытым после того, как он выполнил сценарий, поэтому вы должны изменить сам сценарий bash (т.е. ваш hello.sh).
Например, вы можете добавить любое из следующего в конец вашего скрипта.
echo "Press [ENTER] to exit" && read
- Терминал будет ждать, пока пользователь нажмет Enter. (Фактически, чтобы набрать что-нибудь, нажмите Enter.)
/bin/bash
- Терминал останется открытым.
Для обсуждения общей проблемы остановки оболочки после выполнения команды, включая информацию о других эмуляторах терминала, смотрите: Как запустить скрипт, не закрывая терминал?
Кстати, точка с запятой в конце файла рабочего стола ничего не делает, так что вы можете удалить его.
Сводка. Единственное изменение, которое необходимо внести в исходный файл рабочего стола, - это Terminal=false
, но вам нужно добавить строку в конец вашего bash-скрипта, если вы хотите увидеть, что скрипт запущен.