Программа завершается после запуска скрипта rc.d (Arch Linux) - PullRequest
0 голосов
/ 26 декабря 2010

Эй, ребята, Я написал программу, которая будет действовать в качестве контроллера подсветки клавиатуры для моего MacBook Pro, на котором работает Arch, как и в OS X. Сама программа прекрасно работает, но скрипт rc.d, который я поставляю с программным пакетом Arch, не работает. кажется, что программа не открывается правильно ... или я так думаю.

Исходный код пакета Arch можно найти здесь (скрипт rc.d и файл PKGBUILD). Я добавил «mbpkbdbacklightctl» в строку с демонами в моем /etc/rc.conf.

Что происходит, когда при запуске я вижу, что скрипт rc.d запускает программу, запускается без ошибок, а подсветка на клавиатуре горит, что означает, что программа также работает правильно, но затем, когда gdm начинает вход в gnome, программа, кажется, уже завершена. Я не смог найти ни одной зарегистрированной ошибки, но программа отключит подсветку, если в течение 20 или более секунд не было зарегистрировано никаких событий клавиатуры или мыши, и включит ее снова, когда она будет зарегистрирована, а на gdm этого не происходит, и в гноме. Кроме того, когда я достигаю gnome и выполняю pidof -o %PPID /usr/bin/mbpkbdbacklightctl, он ничего не возвращает, указывая, что программа была завершена. Когда gnome запущен, мне нужно перезапустить скрипт rc.d, чтобы все работало правильно.

Кажется, я не могу понять, что происходит с программой, так как она завершена. Исходный код программы можно найти здесь , хотя я считаю, что ошибка в скрипте rc.d и что она может не запуститься должным образом, чтобы программа "выжила" при запуске gdm .

Есть идеи, что может происходить?

С уважением, Крис Буххольц

1 Ответ

5 голосов
/ 26 декабря 2010

Если вы прочитаете исходный код 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 сеанса. Таким образом, вы должны поместить свой скрипт под /etc/X11/xinit/xinitrc.d

...