diff options
author | Anthony Liguori <aliguori@us.ibm.com> | 2009-05-20 13:01:02 -0500 |
---|---|---|
committer | Anthony Liguori <aliguori@us.ibm.com> | 2009-05-21 08:47:48 -0500 |
commit | f92f8afebe038a4eae9ad90a140c9529f94919a6 (patch) | |
tree | 308194d45c392caffd3121af25cd9fd2f41d24e1 | |
parent | eb0b64f7aa7f6f325aac878265ee9e6c2fc1bf51 (diff) | |
download | qemu-f92f8afebe038a4eae9ad90a140c9529f94919a6.tar.gz qemu-f92f8afebe038a4eae9ad90a140c9529f94919a6.tar.bz2 qemu-f92f8afebe038a4eae9ad90a140c9529f94919a6.zip |
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 <aliguori@us.ibm.com>
-rwxr-xr-x | configure | 19 | ||||
-rw-r--r-- | console.h | 1 | ||||
-rw-r--r-- | vl.c | 41 | ||||
-rw-r--r-- | vnc.c | 8 |
4 files changed, 36 insertions, 33 deletions
@@ -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}~ @@ -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); @@ -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); @@ -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; |