Это мой первый вопрос на Ask Ubuntu, поэтому я хотел бы заранее поблагодарить вас за терпение.
Моя ситуация такова: у меня есть *.desktop
файл (который я написал), который должен выполнять скрипт оболочки. Моим первоначальным намерением было поместить этот файл ~/.config/autostart
так, чтобы он запускался автоматически при запуске; однако это заставляет Ubuntu мигать рабочий стол на долю секунды, а затем выводить меня из системы. Я могу дважды щелкнуть файл на рабочем столе, и он запустит скрипт, как и положено. Если я вытащу файл *.desktop
из ~/Desktop
каталога и поместлю его буквально в любое другое место, двойной щелчок по нему в Nautilus также приведет к немедленному выходу из системы.
Файл *.desktop
настроен на выполнение скрипта оболочки, который начинается bash
в gnome-terminal
. Причины, по которым я это делаю, не обязательно важны, поэтому, пожалуйста, предположите, что мне это нужно. Если я добавляю sleep 10
в начало первого скрипта оболочки, я выхожу из системы через 10 секунд после запуска файла *.desktop
, независимо от того, как он запущен. Похоже, проблема в том, что новое gnome-terminal
окно запускается из второго скрипта, но я не понимаю, как и почему это происходит. Запись на рабочем столе:
[Desktop entry]
Name=Autocapture
Comment=Starts autocap program
Exec=/Autocapture/Startup/InitSystem
Terminal=false
Type=Application
Инициализация системы:
#!/bin/bash
nohup gnome-terminal --title=Autocapture --maximize -e "bash -c 'bash /Autocapture/Startup/StartAutocap.sh';bash"
wmctrl -a "Autocapture" # Give focus to new terminal window
kill -9 $PPID # Close this terminal
ЗапуститьAutocap.sh:
#!/bin/bash
source /usr/local/bin/virtualenvwrapper.sh
workon Autocap
python /path/to/python/module.py
Предполагается (и это успешно происходит, если запущено с рабочего стола), что это запустит полноэкранное gnome-terminal
окно bash
и запустит module.py
программу " " в этом сеансе bash. Это также закроет первое gnome-terminal
запущенное окно и отсоединит дочерний процесс.
Извините за невероятно длинный первый пост. Я просто хочу понять, что здесь не так и как я могу это исправить. Любая помощь будет высоко оценена!
решение1
Хотя у меня есть свои теории, я боюсь заявлять, что я точно знаю (или хотя бы отдаленно), как или почему это работает. Я бы предположил, что это как-то связано с тем, как лаунчер *.desktop
выполняет свою цель. Возможно, я пытался убить окно gnome-terminal после того, как оно уже было закрыто в конце выполнения скрипта, и в итоге убил свой сеанс? Может быть, наоборот? Я не утверждаю, что знаю, но я бы пригласил любого, кто знает,пожалуйста, ответьте на этот вопрос с вашим объяснениемчтобы другие могли извлечь урок из моей ошибки.
Удаление линии kill -9 $PPID
решило проблему
Если скрипт выполняется из *.desktop
лаунчера, то начальное gnome-terminal
окно закроется, оставив второе. Если скрипт выполняется из командной строки (например, $ bash InitSystem
), то начальное gnome-terminal
окно не закрывается.