2009-03-14 9 views
27

Kompilacja na Fedorze 10.Nie można połączyć się z serwerem X: 0.0 z aplikacją Qt

Właśnie zacząłem moją pierwszą aplikację GUI qt. Użyłem wszystkich ustawień domyślnych.

To tylko prosty formularz. Buduje OK bez żadnych błędów. Ale kiedy próbuję uruchomić aplikację. Pojawia się następujący komunikat:

Starting /home/rob/projects/qt/test1/test1/test1... 
No protocol specified 
test1: cannot connect to X server :0.0 

Dzięki za wszelkie rady,

Odpowiedz

40

Ogólne przyczyny tego są następujące:

  1. wyświetlacz nie ustawione w środowisku.
    Rozwiązanie:

    export DISPLAY=:0.0 
    ./myQtCmdHere 
    

    (Ten jeden nie wydaje się być jednym z winy choć, jak jego powiedzenie którym X wyświetlić jego próby połączenia się także jego nie zawsze 0.0, ale większość. czas jest)

  2. niedozwolonego Użytkownik próbuje uruchomić x aplikacja
    Rozwiązanie (x jako użytkownik będący właścicielem, tj siebie)

    xhost +local:root # where root is the local user you want to grant access to. 
    
+1

Po prostu szybka kontynuacja.Co to oznacza: eksport DISPLAY =: 0.0 i dlaczego moja aplikacja się nie powiodła z tego powodu? Dzięki, – ant2009

+0

twój interfejs wyświetlacza uruchamia model serwer-klient. DISPLAY informuje aplikacje, w których jest ich ekran, zwykle IP: DISPLAY.SCREEN, ale bez IP używa localhost. Ale biorąc pod uwagę odpowiednie warunki, możesz "rzucać" i aplikować na dowolnym wyświetlaczu z dostępem do sieci. –

4

Ponadto, jeśli chcesz, aby twój serwer X mógł odbierać połączenia przez TCP, obecnie prawie zawsze musisz to wyraźnie włączyć. Aby sprawdzić, czy jesteś serwer pozwalający na zdalne połączenia TCP spróbować:

telnet 127.0.0.1 6000

Jeśli telnet jest w stanie połączyć, a następnie serwer X jest słuchanie. Jeśli nie, to nie będzie żadnej zdalnej aplikacji X i musisz włączyć zdalne połączenia TCP na swoim serwerze.

2

Dodanie do powyższych odpowiedzi. Byłem w podobnej sytuacji podczas wykonywania testów dla Code2Pdf na travis. Rozwiązałem problem za pomocą xvfb-run. Cytując z podręcznika,

Xvfb prowadzony jest opakowaniem dla polecenia Xvfb (1x), co upraszcza zadanie wykonywania poleceń (zazwyczaj klienta X lub skrypt zawierający listę klientów do uruchomienia) w terminie środowisko wirtualnego serwera X.

Skrypt że napisałem było:

check_install_xvfb() { # check and install xvfb 
    if hash xvfb-run 2>/dev/null; then 
     : 
    else 
     sudo apt-get update 
     sudo apt-get upgrade 
     sudo apt-get install xvfb 
    fi 
} 
check_install_xvfb 
export DISPLAY=localhost:1.0 
xvfb-run -a bash .misc/tests.sh 
# .misc/tests.sh is script that runs unit tests. You can replace it with something suitable to you. 

Proszę ponieść z mojego kodu bash stylu. Jestem programistą noob bash.

Uruchomienie powyższego skryptu pomogło mi. Możesz zobaczyć failing build i passing build.

Mam nadzieję, że pomoże

Powiązane problemy