Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Опциональная автозагрузка приложений (с подтверждением) [РЕШЕНО]  (Прочитано 1237 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн spk-ubuntu

  • Автор темы
  • Активист
  • *
  • Сообщений: 502
    • Просмотр профиля
Появилась хотелка сделать опциональную автозагрузку некоторых приложений: таких как dc++, torrent, и т.п. Выглядеть это должно примерно так: загружается Ubuntu, логинюсь, выползает окошко с вопросом запускать ли "опциональные" приложения, если говорю да - то эти приложения запускаются (назовём это "стандартный" вариант загрузки), а если говорю нет - то значит нет  (это "минималистский" вариант загрузки - используется в тех случаях, когда "загрузился на минутку скопировать какой-нибудь файлик" или "загрузился чтобы поменять что-нить в конфиге и потом перезагрузиться").
Накидал такой вариант скриптика:
#!/bin/bash

function start_apps()
{
  # запускаем приложения
  echo "Starting Eiskaltdcpp..."
  grun eiskaltdcpp-qt >/dev/null
  echo "Starting Transmission..."
  grun transmission >/dev/null
  echo "Done!"
}

# проверим что скрипт запущен от нужного нам пользователя
if [ $UID -ne 1000 ]; then
  echo "UID is not equal to 1000"
  exit 0
fi

echo -n "Do you want to start additional apps (y/n) [y]? "
read -t 60 -n 1 answer
echo ""

case $answer in
  [nN]) exit 0;;
  *) start_apps;;
esac
При запуске в консоли вроде вполне работоспособно. А вот куда и как это прикрутить чтобы оно стартовало при входе пользователя?
« Последнее редактирование: 12 Март 2011, 19:24:06 от spk-ubuntu »

Оффлайн ArcFi

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
А вот куда и как это прикрутить чтобы оно стартовало при входе пользователя?
~/.config/autostart
~/.profile

+ погуглить на тему примеров использования zenity.

Оффлайн spk-ubuntu

  • Автор темы
  • Активист
  • *
  • Сообщений: 502
    • Просмотр профиля
arcfi, спасибо за ответ!
Пробовал размещать разные варианты .desktop-файла в ~/.config/autostart, но ничего путёвого не получилось. (( Что там нужно написать чтобы после логона открылся терминал и в нём начал выполняться bash-скрипт?
Насчёт zenity я думал, но не нашёл как указать чтобы окошко с вопросом закрывалось по таймауту - в этом случае загрузка должна пойти по "стандартному" варианту (т.е. с запуском всех "опциональных" приложений).

Оффлайн ArcFi

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
gnome-terminal -x bash -c "w ; mount ; ls ; read"

Оффлайн spk-ubuntu

  • Автор темы
  • Активист
  • *
  • Сообщений: 502
    • Просмотр профиля
Прописал в автозагрузку:
gnome-terminal -x bash /home/Scripts/on_start_system.sh(текст скрипта on_start_system.sh был приведён выше)
Как результат - при логоне открывается окно терминала, выдаётся вопрос "Do you want to start additional apps (y/n) [y]? ", отвечаю "y", быстро проскакивают надписи "Starting Eiskaltdcpp..." и "Starting Transmission...", окно терминала закрывается, запущенных приложений нет.
Добавил в конец скрипта read чтобы окно терминала не закрывалось. Оказывается приложения запускаются, но при закрытии терминала (при нажатии Enter-а) принудительно "срубаются".
Попробовал переделать запуск на что-то типа "transmission &"+disown, но результат тот же.

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
... Оказывается приложения запускаются, но при закрытии терминала (при нажатии Enter-а) принудительно "срубаются".
...

Да, это так и есть. При завершении родительского процесса дочерние тоже завершаются.
Надо все-таки использовать zenity.

Делаем вспомогательный скрипт zen-killer:
#!/bin/bash
sleep 10 # или сколько не жалко
killall zenity

В основном скрипте пишем так:
/home/user/bin/zen-killer & zenity --question --text "Запустить дополнительные приложения?"
case $? in
  0) # Запускаем ;;
  1) # Незапускаем ;;
  *) # Запускаем ;;
esac

Получаются страшные костыли, но вроде должно работать.
Я думаю, можно сделать и покрасивее. А может, в zenity есть все-таки таймаут.
Делюсь знаниями, но их у меня мало!

Оффлайн BatlKruyzer

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
В man'е по zenity нашёл такую строчку
(Нажмите, чтобы показать/скрыть)
Может поможет?
Во имя процесса-отца, процесса-сына и святого root'а. Админь.

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
Ура. Это то, что надо. А то просто стыдно за предложенные костыли.
Делюсь знаниями, но их у меня мало!

Оффлайн spk-ubuntu

  • Автор темы
  • Активист
  • *
  • Сообщений: 502
    • Просмотр профиля
1. Финальный вариант скрипта:
#!/bin/bash

function start_apps()
{
  # запускаем приложения
  echo "Starting Transmission..."
  grun transmission
  echo "Starting Eiskaltdcpp..."
  grun eiskaltdcpp-qt
  echo "Done!"
}

zenity --question --text "Запустить дополнительные приложения?" --timeout=15
if [ $? -ne 1 ]; then
  start_apps
fi

exit 0
2. Сохраняем как /home/someuser/on_start_system.sh
3. Система->Параметры->Запускаемые приложения, по кнопке Добавить добавляем новую программу в автозапуск, в поле Команда пишем /home/someuser/on_start_system.sh (поля Название и Комментарий заполняем по своему вкусу).

Спасибо огромное arcfi, inkblack и BatlKruyzer за помощь!

 

Страница сгенерирована за 0.104 секунд. Запросов: 22.