From f92f8afebe038a4eae9ad90a140c9529f94919a6 Mon Sep 17 00:00:00 2001 From: Anthony Liguori Date: Wed, 20 May 2009 13:01:02 -0500 Subject: [PATCH] Eliminate --disable-gfx-check and make VNC default when SDL not available --disable-gfx-check predates VNC server support. It made sense back then because the only thing you could do without SDL was use -nographic mode or similar tricks. Since this is a very advanced mode of operation, gfx-check provided a good safety net for casual users. A casual user is very likely to use VNC to interact with a guest. In fact, it's often frustrating to install QEMU on a server and have to specify disable-gfx-check when you only want to use VNC. This patch eliminates disable-gfx-check and makes SDL behave like every other optional dependency. If SDL is not available, instead of failing ungracefully if no special options are specified, we default to -vnc localhost:0,to=99. When we do default to VNC, we also print a message to tell the user that we've done this include which port we're currently listening on. Signed-off-by: Anthony Liguori --- configure | 19 ++----------------- console.h | 1 + vl.c | 41 ++++++++++++++++++++++++++--------------- vnc.c | 8 +++++++- 4 files changed, 36 insertions(+), 33 deletions(-) diff --git a/configure b/configure index 8fdbc1ccc3..186e535768 100755 --- a/configure +++ b/configure @@ -172,7 +172,6 @@ solaris="no" kqemu="no" profiler="no" cocoa="no" -check_gfx="yes" softmmu="yes" linux_user="no" darwin_user="no" @@ -191,6 +190,7 @@ kerneldir="" aix="no" blobs="yes" fdt="yes" +sdl="yes" sdl_x11="no" xen="yes" pkgversion="" @@ -438,8 +438,6 @@ for opt do sdl="no" ; audio_drv_list="coreaudio `echo $audio_drv_list | sed s,coreaudio,,g`" ;; - --disable-gfx-check) check_gfx="no" - ;; --disable-system) softmmu="no" ;; --enable-system) softmmu="yes" @@ -835,7 +833,7 @@ fi sdl_too_old=no -if test -z "$sdl" ; then +if test "$sdl" = "yes" ; then sdl_config="sdl-config" sdl=no sdl_static=no @@ -1346,10 +1344,6 @@ echo "preadv support $preadv" if test $sdl_too_old = "yes"; then echo "-> Your SDL version is too old - please upgrade to have SDL support" fi -if [ -s $TMPSDLLOG ]; then - echo "The error log from compiling the libSDL test is: " - cat $TMPSDLLOG -fi #if test "$sdl_static" = "no"; then # echo "WARNING: cannot compile statically with SDL - qemu-fast won't have a graphical output" #fi @@ -1772,15 +1766,6 @@ case "$target" in ;; esac -if test "$target_user_only" = "no" -a "$check_gfx" = "yes" \ - -a "$sdl" = "no" -a "$cocoa" = "no" ; then - echo "ERROR: QEMU requires SDL or Cocoa for graphical output" - echo "To build QEMU without graphical output configure with --disable-gfx-check" - echo "Note that this will disable all output from the virtual graphics card" - echo "except through VNC or curses." - exit 1; -fi - #echo "Creating $config_mak, $config_h and $target_dir/Makefile" test -f $config_h && mv $config_h ${config_h}~ diff --git a/console.h b/console.h index 953b7843e4..4172175823 100644 --- a/console.h +++ b/console.h @@ -320,6 +320,7 @@ void vnc_display_close(DisplayState *ds); int vnc_display_open(DisplayState *ds, const char *display); int vnc_display_password(DisplayState *ds, const char *password); void do_info_vnc(Monitor *mon); +char *vnc_display_local_addr(DisplayState *ds); /* curses.c */ void curses_display_init(DisplayState *ds, int full_screen); diff --git a/vl.c b/vl.c index 9f25cd40d5..e28da7ed7d 100644 --- a/vl.c +++ b/vl.c @@ -203,7 +203,7 @@ enum vga_retrace_method vga_retrace_method = VGA_RETRACE_DUMB; static DisplayState *display_state; int nographic; static int curses; -static int sdl; +static int sdl = 1; const char* keyboard_layout = NULL; int64_t ticks_per_sec; ram_addr_t ram_size; @@ -5952,25 +5952,36 @@ int main(int argc, char **argv, char **envp) } } else { #if defined(CONFIG_CURSES) - if (curses) { - /* At the moment curses cannot be used with other displays */ - curses_display_init(ds, full_screen); - } else + if (curses) { + /* At the moment curses cannot be used with other displays */ + curses_display_init(ds, full_screen); + } else #endif - { - if (vnc_display != NULL) { - vnc_display_init(ds); - if (vnc_display_open(ds, vnc_display) < 0) - exit(1); - } +#if defined(CONFIG_SDL) || defined(CONFIG_COCOA) + if (sdl) { #if defined(CONFIG_SDL) - if (sdl || !vnc_display) - sdl_display_init(ds, full_screen, no_frame); + sdl_display_init(ds, full_screen, no_frame); #elif defined(CONFIG_COCOA) - if (sdl || !vnc_display) - cocoa_display_init(ds, full_screen); + cocoa_display_init(ds, full_screen); #endif + } else +#endif + { + int print_port = 0; + + if (vnc_display == NULL) { + vnc_display = "localhost:0,to=99"; + print_port = 1; } + + vnc_display_init(ds); + if (vnc_display_open(ds, vnc_display) < 0) + exit(1); + + if (print_port) { + printf("VNC server running on `%s'\n", vnc_display_local_addr(ds)); + } + } } dpy_resize(ds); diff --git a/vnc.c b/vnc.c index ad3c1ce151..3f5d622ab4 100644 --- a/vnc.c +++ b/vnc.c @@ -86,7 +86,6 @@ char *vnc_socket_local_addr(const char *format, int fd) { return addr_to_string(format, &sa, salen); } - char *vnc_socket_remote_addr(const char *format, int fd) { struct sockaddr_storage sa; socklen_t salen; @@ -2101,6 +2100,13 @@ int vnc_display_password(DisplayState *ds, const char *password) return 0; } +char *vnc_display_local_addr(DisplayState *ds) +{ + VncDisplay *vs = ds ? (VncDisplay *)ds->opaque : vnc_display; + + return vnc_socket_local_addr("%s:%s", vs->lsock); +} + int vnc_display_open(DisplayState *ds, const char *display) { VncDisplay *vs = ds ? (VncDisplay *)ds->opaque : vnc_display;