LINUX.ORG.RU
 

переключение консоли из кода


0

0

Кто-нибудь знает как это можно сделать:

Есть прога на java, запущенная на /dev/tty1, а затем переключающаяся на tty7
Как из кода переключить консоль?

Это надо вот для чего:
В процессе работы она запускает X, и затем должна вывести окно, но происходит вылет:

Exception in thread "main" java.lang.InternalError: Can't connect to X11 window server using ':0.0' as the value of the DISPLAY variable.
at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)
at sun.awt.X11GraphicsEnvironment.<clinit>(X11GraphicsEnvironment.java:134)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:141)
at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.ja va:62)
at java.awt.Font.initializeFont(Font.java:308)
at java.awt.Font.<init>(Font.java:344)

Вылет происходит, когда X-сервер уже запущен. Как я предполагаю, переключение консоли должно помочь?


[#]  

Re: переключение консоли из кода

Странные желания. Я бы за такое побил :-)

З.Ы. смотри исходник утилиты chvt

***** ()
[#]  

Re: переключение консоли из кода

Переключение консоли не поможет.

Разбирайся, что у тебя с $DISPLAY.

* ()
[#] Ответ на: Re: переключение консоли из кода от execve 23.07.2007 11:52:09  

Re: переключение консоли из кода

Проверил: В X-ах:

set | grep DISPLAY

DISPLAY=:0

В tty1 - tty6 переменная не определена

Попробую определить её до вызова окна...

* ()
[#] Ответ на: Re: переключение консоли из кода от krum 23.07.2007 12:50:56  

Re: переключение консоли из кода

> чтоб взломали?

Во-1, во многих случаях X слушает только localhost.

Во-2, чтобы заработало. Потом можно будет сделать нормально.

* ()
[#] Ответ на: Re: переключение консоли из кода от execve 23.07.2007 13:15:09  

Re: переключение консоли из кода

Сделал так: запускаю прогу, она запускает X-ы, в X-ах я набираю xhost +,
прога ждёт, потом пытается вывести окно

Какой-то эффект есть, ошибка поменялась:

Exception in thread "main" java.lang.NoClassDefFoundError
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:141)
at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.ja va:62)
at java.awt.Font.initializeFont(Font.java:308)
at java.awt.Font.<init>(Font.java:344)

Проверю CLASSPATH, может поможет

* ()
[#] Ответ на: Re: переключение консоли из кода от KUser 23.07.2007 13:43:12  

Re: переключение консоли из кода

Последовательность запуска должна быть такая:

X
В иксах: "xhost +"
DISPLAY=... твоя_программа

* ()
[#] Ответ на: Re: переключение консоли из кода от execve 23.07.2007 15:47:15  

Re: переключение консоли из кода

а если шелл не понимает синтаксис VAR="value" program ?

лечше уж сперва устанавливай переменную окружения DISPLAY и запускай прогу

или запускай прогу как <prog> -display <id> если он такой синтаксис поддерживает

anonymous ()
[#] Ответ на: Re: переключение консоли из кода от execve 23.07.2007 15:47:15  

Re: переключение консоли из кода

Я имел в виду немного другое: прога должна управлять запуском X-ов, поэтому должна быть запущена раньше X

После их пуска должна вывести окно на экран - отсюда и проблема.
Из-под X-ов окно запускается нормально, тут нет проблем

* ()
[#] Ответ на: Re: переключение консоли из кода от KUser 23.07.2007 16:55:57  

Re: переключение консоли из кода

Главное, чтобы программа не пыталась работать с X до окончания их загрузки.

Хотя, на мой взгляд, ты хочешь странного. Что мешает запускать X всегда и независимо от программы?

* ()
[#] Ответ на: Re: переключение консоли из кода от execve 24.07.2007 7:17:41  

Re: переключение консоли из кода

Шеф хочет странного :)

Программа и не пытается работать с X-ами до их запуска - я это предусмотрел sleep-ом: после вызова startx она даёт X-ам 2 мин. на старт, потом я ручками ввожу xhost +, потом прога пытается вывести окно - и вываливается с ошибкой.

>Что мешает запускать X всегда и независимо от программы?

Задание!

Юзер не должен иметь возможность перехода в X, пока прога не отработала.
Была другая идея: запускать прогу как login-manager в X. Но прога вылетает с той же ошибкой

* ()