Программа завершается после того, как сценарий RC.D запускает его (Arch Linux)

StackOverflow https://stackoverflow.com/questions/4535199

  •  13-10-2019
  •  | 
  •  

Вопрос

Эй, ребята, я написал программу, которая выступает в качестве контроллера подсветки клавиатуры для моего 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top