2009-05-07 5 views
17

Używam aplikacji java, która tworzy wizualne przedstawienie niektórych rzeczy, które robi, podczas gdy to robi. Jednak chcę uruchomić to w skrypcie, który nie będzie miał ekranu, do którego można dołączyć. W bieżącym środowisku nie ma nawet ustawionej zmiennej środowiskowej DISPLAY. Próbowałem po prostu ustawić DISPLAY na: 0.0. Ale to nie istnieje. Nie dbam o wyświetlacz. Chcę tylko, aby aplikacja przetwarzała pliki w trybie cichym.A/dev/null jest niezmienny dla WYŚWIETLACZA, gdy wyświetlany jest tylko dźwięk

Ponieważ nie mogę po prostu wyłączyć wyświetlacza (nie moja aplikacja), pozostaję przy próbie obejścia potrzeby wyświetlania.

Czy istnieje czarna dziura, na którą mogę wysłać WYŚWIETLACZ? odpowiednik/dev/null?

Szukałem trochę w Internecie, ale słowa, o których mógłbym pomyśleć: "wyświetlaj" "null" "lekceważenie" itd. Są dwoma ogólnymi, które pozwalają mi uzyskać odpowiedź.

Jest to środek większego skryptu, więc chcę, aby pozostała część wyjścia do stdout była dostępna.

Odpowiedz

13

Istnieje bezgłowy serwer X o nazwie Xvfb. Jest to w zasadzie to, czego potrzebujesz, ponieważ akceptuje klientów X, ale zasadniczo nie robi nic z danymi z nich. Z tej połączonej strony (nieco sparafrazowanej):

Xvfb, X wirtualny framebuffer, jest serwerem wyświetlania implementującym protokół serwera wyświetlania X11.

W przeciwieństwie do innych serwerów wyświetlania, Xvfb wykonuje wszystkie operacje graficzne w pamięci bez pokazywania jakiegokolwiek wyjścia ekranu.

Z punktu widzenia klienta działa dokładnie tak, jak każdy inny serwer wyświetlania X, obsługując żądania i wysyłając zdarzenia i błędy, stosownie do potrzeb. Jednak nie pokazano żadnego wyjścia.

Ten serwer wirtualny nie wymaga komputera, na którym działa, aby mieć ekran lub dowolne urządzenie wejściowe. Konieczna jest tylko warstwa sieciowa.

Jeśli nie możesz tego znaleźć, inną możliwością jest użycie wolnego komputera z pełną instalacją CygWin. CygWin jest dostarczany z pełnym serwerem X, do którego można podłączyć aplikację (i po prostu zignorować ją). Możesz nawet ustawić go jako DISPLAY dla firm/dev/null.

Ale najpierw zajrzałbym do Xvfb.

+0

To bardzo dobrze się sprawdziło. To jest Xvfb. Pudełko nie jest moje, ale administrator był na tyle miły, by umieścić go na pudełku. – Marc

+0

Dziękujemy! Zawsze chciałem być w stanie uruchomić gschem, aby tworzyć pliki PDF i PNG z moich schematów na mojej maszynie do budowania, ale to nie działało bez X (co jest uciążliwe w tyłku). Teraz z Xvfb jest serwer X, z którym można się połączyć! – KeyserSoze

0

Czy można uruchomić maszynę wirtualną na docelowym komputerze? Następnie możesz ustawić DISPLAY na ten. Możesz też wypróbować vnc (obecnie na komputerze, który na to nie pozwala lub spróbuję ...).

1

Możesz użyć Xvfb, jak wspomniano powyżej. W ten sposób nigdy nie zobaczysz wyjścia (możesz użyć narzędzia do robienia zrzutów ekranu).

http://en.wikipedia.org/wiki/Xvfb http://packages.debian.org/sid/xvfb

Albo można skonfigurować serwer VNC. W systemie Linux serwer VNC jest zaimplementowany jako specjalny serwer X, do którego można uzyskać dostęp za pośrednictwem VNC, a nie jest wyświetlany na lokalnym monitorze. To daje ci bezgłowy serwer X, z dodatkowym bonusem, który możesz podłączyć do niego przez VNC, na wypadek gdybyś musiał się przekonać, co się dzieje, aby do.

http://www.tightvnc.com/vncserver.1.html

vncserver jest ładny skrypt otoki dla VNC (napięty), co sprawia, począwszy serwer VNC wietrze. Większość dystrybucji powinna zainstalować ją domyślnie.

2

Jeśli jest to program java, można użyć trybu bezgłowego do uruchomienia aplikacji.

spróbuj uruchomić go z -Djava.awt.headless=true parametru, jak to, czy jest to plik jar:

java -Djava.awt.headless=true -jar jarfile.jar

More about headless mode...

+0

Nie miałem szansy, aby to podejście działało. Próbowałem, ale otrzymałem jeszcze wyjątek bez głowy. Bez wątpienia, jeśli ta mała aplikacja została napisana poprawnie, mógłbym użyć tej flagi. – Marc

+0

@Marc: 'java.awt.headless = true' informuje JVM, że żaden wyświetlacz nie jest dostępny. Niektóre interfejsy API języka Java mogą sobie z tym poradzić i kontynuować pracę, inne nie mogą, i wyrzucić "HeadlessException". To, czy to działa, zależy od tego, co program robi. Więcej informacji można znaleźć w artykule [Używanie trybu bezgłowego w platformie Java SE] (http://www.oracle.com/technetwork/articles/javase/headless-136834.html) (autor: Artem Ananiev i Alla Redko, czerwiec 2006). – sleske

Powiązane problemy