Программа завершается после того, как сценарий RC.D запускает его (Arch Linux)
Вопрос
Эй, ребята, я написал программу, которая выступает в качестве контроллера подсветки клавиатуры для моего MacBook Pro, которая запускает Arch, точно так же, как и в OS X. Сама программа отлично работает, но сценарий RC.D, который я предоставляю в программе Arch Program Пакет, кажется, не открывает программу правильно ... или так я думаю.
Источник в пакете арки можно найти здесь (RC.D Script и Pkgbuild File). Я добавил «mbpkbdbacklightctl» в линию с Daemons в моем /etc/rc.conf.
Что происходит, так это то, что после запуска я вижу, что сценарий RC.D запускается, программа запускается без ошибок, а подсветка на клавиатуре освещена, что означает, что программа также работает должным образом, но затем, когда GDM начинает регистрироваться В Гноме программа, похоже, уже была прекращена. Я не смог найти какие -либо ошибки, зарегистрированные, но программа отключит подсветку, если не зарегистрировано события с клавиатурой или мышью в 20 или более и более и включите его, когда он зарегистрирован, и этого не происходит в GDM, и ни один в Гноме. Кроме того, когда я достигаю гнома и делаю pidof -o %PPID /usr/bin/mbpkbdbacklightctl
, он не возвращает ничего, что указывает на то, что программа была прекращена. Когда начинается GNOME, я должен перезапустить сценарий RC.D, чтобы все было правильно работать.
Кажется, я не могу понять, что происходит с программой, так как она прекращена. Источник программы можно найти здесь, Однако, я считаю, что ошибка находится в сценарии RC.D и что она может не запустить программу должным образом, чтобы она «выжила» в начале GDM.
Есть идеи, что может происходить?
С уважением, Крис Буххольц
Решение
Если вы прочитаете исходный код для mbpkbdbacklightctl.cpp
Вы увидите эти строки:
95 std::string the_display = ":0.0";
96 Display *x11_display = XOpenDisplay(the_display.c_str());
97 if(x11_display != NULL) {
Таким образом, это не удастся, если нет активного X -сервера, это означает, что вам нужно начать этот сценарий после X Session начинается. Итак, вы должны поставить свой сценарий под /etc/X11/xinit/xinitrc.d