crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Как узнать запущен ли X-сервер?, ?
kwisp
  опции профиля:
сообщение 6.4.2009, 14:54
Сообщение #1


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


собственно. как узнать запущен ли X-сервер на момент запуска программы???
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Kagami
  опции профиля:
сообщение 6.4.2009, 15:45
Сообщение #2


Старейший участник
****

Группа: Участник
Сообщений: 601
Регистрация: 2.2.2009
Пользователь №: 523

Спасибо сказали: 101 раз(а)




Репутация:   9  


Поглядеть значение переменной окружения DISPLAY?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 7.4.2009, 9:01
Сообщение #3


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


значение переменной не даст ничего насколько я понимаю.
она может существовать и при остановленных иксах.
тут вопрос на самом деле оказался еще шире.
должен присутствовать способ узнатьв линуксе запущены ли иксы и имеет ли право программа на графическое представление. может ли рисовать?
вот переррыли с товарищем документацию пока безуспешно.
даже в коде искали что нить подобное.

могу привести из ассистента странный пример по моему:
Раскрывающийся текст
int main(int argc, char **argv)
{
#ifdef Q_WS_X11
     bool useGUI = getenv("DISPLAY") != 0;
#else
     bool useGUI = true;
#endif
     QApplication app(argc, argv, useGUI);

     if (useGUI) {
        // start GUI version
        ...
     } else {
        // start non-GUI version
        ...
     }
     return app.exec();
}


вот тут странно. проверяется с помощью #define под иксами запускаем или нет если под иксами то проверяем существует ли значение переменной "DISPLAY" потом независимо от результата создается объект QApplication который при отсутствии иксов валит программу с сообщением
Цитата
Cannot connect to X-server

и только потом происходит проверка есть ли дисплей или нет.... короче странный пример помоему.

Сообщение отредактировал kwisp - 7.4.2009, 9:02
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 7.4.2009, 9:56
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


я неочень хорошо понимаю эту тему, но примерчик из жизни в openSUSE.

Если я сидя в кедах открою, в них, консоль. Затем наберу YaST2, этот самый YaST стартанет в консоли, чего-то там напишет, а потом появится в кедах окно YaST'а.

Если же я переключу виртуальный терминал (Alt+Ctrl+Fn) и в нем наберу тоже самое, YaST запустится в этом терминале в режиме псевдографики (ncurses).

Может ковырнуть его исходники (хотя там можно все конечности сломать)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Kagami
  опции профиля:
сообщение 7.4.2009, 10:29
Сообщение #5


Старейший участник
****

Группа: Участник
Сообщений: 601
Регистрация: 2.2.2009
Пользователь №: 523

Спасибо сказали: 101 раз(а)




Репутация:   9  


Если бы взглянули в документацию, то все было бы понятнее:
Цитата
QApplication::QApplication ( int & argc, char ** argv, bool GUIenabled )
Constructs an application object with argc command line arguments in argv. If GUIenabled is true, a GUI application is constructed, otherwise a non-GUI (console) application is created.


Таким образом, если программа запущена под иксами, мы проверяем наличие переменной DISPLAY. Если она есть, то в конструктор пойдет true и мы получим графическое приложение. Если не найдем, то у нас получится консольное приложение в котором мы выведем сообщение и выйдем. Чего может быть проще?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 7.4.2009, 10:50
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Kagami @ 7.4.2009, 14:29) *
мы проверяем наличие переменной DISPLAY
ну есть эта переменная, а X-сервер остановлен, разве такого не может быть?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Kagami
  опции профиля:
сообщение 7.4.2009, 10:57
Сообщение #7


Старейший участник
****

Группа: Участник
Сообщений: 601
Регистрация: 2.2.2009
Пользователь №: 523

Спасибо сказали: 101 раз(а)




Репутация:   9  


При штатной остановке он ее вычищает сам
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 7.4.2009, 12:56
Сообщение #8


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(Kagami @ 7.4.2009, 11:29) *
Если бы взглянули в документацию, то все было бы понятнее:

спасибо за экскурс в документацию :)
Цитата(Kagami @ 7.4.2009, 11:29) *
мы проверяем наличие переменной DISPLAY. Если она есть, то в конструктор пойдет true

может я не совсем понятно выазил свою мысль.
однако,
Цитата(kwisp @ 7.4.2009, 10:01) *
значение переменной не даст ничего насколько я понимаю.
она может существовать и при остановленных иксах.


короче пример из ассистента говорит нам штатной ситуации.
получатся круг систем(в смысле различных машин) на которых программа будет работать корректно существенно съужается.
для меня это ни есть хорошо.
мне надо наверняка.
+
как узнать имеются ли права подключаться к иксам?

Сообщение отредактировал kwisp - 7.4.2009, 12:57
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Kagami
  опции профиля:
сообщение 7.4.2009, 14:09
Сообщение #9


Старейший участник
****

Группа: Участник
Сообщений: 601
Регистрация: 2.2.2009
Пользователь №: 523

Спасибо сказали: 101 раз(а)




Репутация:   9  


Если у пользователя есть право подключаться к дисплею, у него будет эта переменная окружения. Нет права - нет переменной. Все просто :) Правда возможен случай когда запущено несколько дисплеев для разных пользователей...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 7.4.2009, 14:29
Сообщение #10


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(Kagami @ 7.4.2009, 15:09) *
Все просто

не думаю что все так просто. будет время уговорю товарища снимем мувиё по данному вопросу. чтоб нагдядно увидеть:)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 12.12.2019, 22:29