LINUX.ORG.RU

QT на голых Х-ах.


0

0

Т.е. есть прога которая запускается вместо логонера, она написана с использованием QT. Так вот её я стартую через

execlp ( XINIT, XINIT, LDM, NULL )

где XINIT есть /usr/X11R6/bin/xinit а LDM есть /usr/bin/ldm. Так вот есть своеобразная управляющая программа которая выполняет эту функцию, но по окончанию вижу следующий лог:

XFree86 Version 4.3.0
Release Date: 27 February 2003
X Protocol Version 11, Revision 0, Release 6.6
Build Operating System: Linux 2.6.7 i686 [ELF]
Build Date: 30 July 2004
Before reporting problems, check http://www.XFree86.Org/
to make sure that you have the latest version.
Module Loader present
Markers: (--) probed, (**) from config file, (==) default setting,
(++) from command line, (!!) notice, (II) informational,
(WW) warning, (EE) error, (NI) not implemented, (??) unknown.
(==) Log file: "/var/log/XFree86.0.log", Time: Sat Jul 31 14:37:07 2004
(==) Using config file: "/etc/X11/XF86Config"
(WW) ATI(0): Failed to set up write-combining range (0xfd000000,0x800000)
(WW) ATI(0): Failed to set up write-combining range (0xfd000000,0x800000)
QPixmap: Cannot create a QPixmap when no GUI is being used
QPixmap: Cannot create a QPixmap when no GUI is being used
kdecore (KIconLoader): WARNING: Icon directory /usr/share/icons/gnome/ group 192x192/emblems not valid.
kdecore (KIconLoader): WARNING: Icon directory /usr/share/icons/gnome/ group 96x96/emblems not valid.
kdecore (KIconLoader): WARNING: Icon directory /usr/share/icons/gnome/ group 72x72/emblems not valid.
..............................
kdecore (KIconLoader): WARNING: Icon directory /usr/share/icons/hicolor/ group 48x48/stock/net not valid.
ldm: Fatal IO error: client killed
kdeinit: Fatal IO error: client killed
/usr/X11R6/bin/xinit: connection to X server lost.
kded: Fatal IO error: client killed
klauncher: Exiting on signal 15


сообщения про иконки не мешают т.е. прога работает и с ними а вот последнее мне не понятно, почему не запустился ldm. Причем Х-ы на секунду успели показаться.
Как мне сдесь сказали прога запускаемая так как сдесь показано, впринципе ни чем не отличается от обычного приложения

Заранее спасибо!!!

★★★★★

А если запустить твою прогу как обычное приложение, она работает? Если да, то работает ли она, будучи запущенной xinit'ом не как Session Manager, а вместо WM/xterm'а? И если все ок, то чему равно значение переменной PATH при обычном запуске и при запуске как Session Manager?

И еще: попробуй поставить свой обработчик на фатальные ошибки (с помощью XSetIOErrorHandler). Пусть он чего-нибудь скажет на stderr, чтобы знать, оно это или нет. А то похоже, что Х сервер рвет соединение.

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

При запуске как SM так в WM значение PATH одно и тоже, оно включает путь /usr/bin где ссобственно и лежит моя прога. Так же оно работает как обяычное приложение.

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

Вот main.cpp, это единственное место где поминаются классы KDE, далее только QT:

#include "ldm.h"

#include <kapplication.h>
#include <kaboutdata.h>
#include <kcmdlineargs.h>
#include <klocale.h>

#include <sys/types.h>
#include <unistd.h>
#include <iostream>

#include <X11/Xlib.h>
#include <X11/cursorfont.h>

#define XINIT "/usr/X11R6/bin/xinit"
#define LDM "/usr/bin/ldm"
#define ARG "--"

using namespace std;

static const char description[] =
I18N_NOOP("A KDE Login Application");

static const char version[] = "0.0.1";

static KCmdLineOptions options[] =
{
// { "+[URL]", I18N_NOOP( "Document to open." ), 0 },
KCmdLineLastOption
};

int main(int argc, char **argv)
{
if ( argc > 0 )
{
KAboutData about ("ldm", I18N_NOOP("ldm"), version, description,
KAboutData::License_GPL, "(C) 2004 XXXXX XXXXX", 0, 0, "XXXXXX");
about.addAuthor ( "XXXXX XXXXXX", 0, "XXXXX@XXXX.ru" );
KCmdLineArgs::init(argc, argv, &about);
KCmdLineArgs::addCmdLineOptions( options );

KApplication app;
ldm *login = 0;

KCmdLineArgs *args = KCmdLineArgs::parsedArgs();

login = new ldm();
app.setMainWidget( login );
login->show();
args->clear();

return app.exec ( );
}
else
{
pid_t pid = fork();
if ( pid == 0 )
{
execlp ( XINIT, XINIT, LDM, NULL );
}
}
}

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

Попробую конечно.

Только почему то прога написаная не мной такого же назначения нормально работает в таком исполнение.

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