LINUX.ORG.RU

LXDE: как сделать автостарт программы, но после появления панели рабочего стола?

 , ,


0

1

В LXDE и в старых версиях (лично наблюдал), и в новых (LXPanel 0.9.3) есть такая проблема: панель рабочего стола стартует с какой-то задержкой.

Из-за этого некоторые автостартующие программы, которые размещают свой значек в системном трее, не могут его там разместить, и начинают работать без системного значка. Это очень неудобно.

Настройка автостарта производится в Параметры - Приложения по умолчанию для LXSession - Автозапуск. В этом окне нет настройки типа «дождаться старта панели». Первые три строки списка - это преднастроенные приложения:

@lxpanel --profile LXDE
@pcmanfm --desktop --profile LXDE
@xscreensaver -no-splash

Далее идут строки с приложениями, которые я вручную добавляю в автозапуск. Вот тут и проблема. Причем, если я их запущу позже вручную, после того как все «прогрузилось», то значек в систрее проявляется.

При старте LXDE хорошо видно, что панель разворачивается с запозданием: появляется серый прямоугольник на месте панели, появляются окна программ с их содержимым, и только потом на панели появляются кнопки, заголовки окон, систрей.

Вот. Каким методом можно автостартовать программы после запуска панели задач?

★★★★★

Убираешь из «Параметры - Приложения по умолчанию для LXSession - Автозапуск» все, что там находится, потом пишешь в ~/.config/openbox/autostart

lxpanel --profile LXDE && \
pcmanfm --desktop --profile LXDE && \
xscreensaver -no-splash && \
то_приложение_что_нужно_0 && \
то_приложение_что_нужно_1 && \

Vsevolod-linuxoid ★★★★★
()
Ответ на: комментарий от bvn13

Да такое впечатление, что все программы стартуют параллельно, ежели их в настроечном интерфейсе прописать.

Поэтому Vsevolod-linuxoid и пишет длинную команду через «&&» , чтобы старт происходил последовательно.

Это, кстати, тоже не лучший вариант, потому что чревато тем, что программы в «хвосте» могут не запуститься если хотя бы одна программа впереди вернет ошибку. Наверно лучше через точку с запятой ";" перечислять.

Xintrea ★★★★★
() автор топика
Последнее исправление: Xintrea (всего исправлений: 1)
Ответ на: комментарий от Xintrea

я имею в виду, что можно запуск всех программ положит в скрипт, в начале которого - сделать задержку. или перед стартом каждой делать свою задержку, если они распараллеливаются

bvn13 ★★★★★
()

но это все костыли, конечно

bvn13 ★★★★★
()
Ответ на: комментарий от Vsevolod-linuxoid

Убираешь из «Параметры - Приложения по умолчанию для LXSession - Автозапуск» все, что там находится, потом пишешь в ~/.config/openbox/autostart

В общем, создал файл ~/.config/openbox/autostart. Дал права на выполнение на всякий случай. Прописал туда:

cat " Autostart " >> /tmp/openboxAutostartLog.txt

Результат: файл лога не создается, то есть команда не выполняется.

Пробовал удалить файл ~/.config/lxsession/LXDE/autostart, чтобы сработал ~/.config/openbox/autostart.

В результате ~/.config/lxsession/LXDE/autostart создается при старте автоматически с содержимым:
@lxpanel --profile LXDE
@pcmanfm --desktop --profile LXDE
@xscreensaver -no-splash

А файл ~/.config/openbox/autostart так и не выполняется.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Vsevolod-linuxoid

Видимо в новых LXDE что-то намудрили, раньше вроде работало.

Походу дело в другом.

Все программы, которые должны запускаться при автозапуске - они не завершаются. Это переключатель клавиатуры, менеджер буфера обмена, IP телефон, эмулятор консоли и т. д. Они запустились и должны работать.

А связка через && ожидает что программа завершится. Поэтому и не может все запустить. Щас еще раз проверю.

UPD: Ага, вместо cat надо echo написать, но суть это не меняет.

Xintrea ★★★★★
() автор топика
Последнее исправление: Xintrea (всего исправлений: 1)

Из-за этого некоторые автостартующие программы, которые размещают свой значек в системном трее, не могут его там разместить, и начинают работать без системного значка. Это очень неудобно.

Вообще это выглядит как баг в приложении. XEmbed не предусматривает такого, окна-иконки должны создаваться независимо от наличия или отсутствия лотка.

Что за софт?

Deleted
()
Ответ на: комментарий от Xintrea

Да такое впечатление, что все программы стартуют параллельно, ежели их в настроечном интерфейсе прописать.

Так и есть. Запускай скрипт, делай там sleep, а потом запускай, что нужно.

Ну или можно пойти длинным путём и написать обёртку, которая ждёт наличия лотка, а потом запускает сабжевый софт.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Deleted

Вообще это выглядит как баг в приложении. XEmbed не предусматривает такого, окна-иконки должны создаваться независимо от наличия или отсутствия лотка.
Что за софт?

Это MyTetra, которую я пишу. Она умеет работать в средах с лотком, в средах без лотка, в мобильном варианте. При старте она проверяет наличие лотка, и если он есть, создает в нем иконку. Если лотка нет, иконка и ее обработчики создаваться не будет, потому что будет сегфолт.

А тут получается, что среда лоток поддерживает, но лоток не создан на момент старта MyTetra. Она это видит, и иконку не создает.

Такое же поведения раньше наблюдал в ClipIt, но щас такого нет, но он на другом фреймверке.

Xintrea ★★★★★
() автор топика

Да просто скрипт добавь в автозапуск. Что-то вроде этого:

while ! pgrep lxpanel; do
    sleep 1
done

program1&
program2&
...

Kron4ek ★★★★★
()
Ответ на: комментарий от Vsevolod-linuxoid

В общем, проблема решается только скриптом запуска отдельной программы.

Даже если пропишешь в интерфейсе LXDE (или в ~/.config/lxsession/LXDE/autostart что то же самое) вместо команды запуска программы строку:

sleep 10 ; команда запуска

То так тоже работать не будет.

Нужно сделать скрипт для запуска программы, пометить туда sleep 10 и запуск программы, только так и будет срабатывать.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

При старте она проверяет наличие лотка, и если он есть, создает в нем иконку.

Это не по стандарту поведение. Лоток вполне может прогрузиться позже приложения, упасть в процессе работы, быть заменён на другой и т.п. Программа должна все эти случаи пережить.

Если лотка нет, иконка и ее обработчики создаваться не будет, потому что будет сегфолт.

А в чем конкретно проблема убрать сегфолт? Ты сам обрабатываешь XEmbed или через тулкит? Вряд ли в тулките допускали бы сегфолт на ровном месте.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Deleted

Ты сам обрабатываешь XEmbed или через тулкит?

Через Qt. Надо заново посмотреть, может со времен Qt 4.3 что-то изменилось, я этот кусок кода не давно не трогал.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

При старте она проверяет наличие лотка, и если он есть, создает в нем иконку. Если лотка нет, иконка и ее обработчики создаваться не будет

Ты можешь свою программу доработать так:

она при запуске смотрит, есть ли лоток, если нет, ждёт 7 секунд (если лоток есть - пробует, если ошибка, то тоже ждёт 7 сек).

После первой неудачной попытки, прождав 7 секунд, пробует второй раз. И если второй раз не получается, выдаёт сегфолт.

Это будет решением и для других пользователей (чайников).
Скрипты 98% юзеров городить не будут.

Novator ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.