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>
This commit is contained in:
Anthony Liguori 2009-05-20 13:01:02 -05:00
parent eb0b64f7aa
commit f92f8afebe
4 changed files with 36 additions and 33 deletions

19
configure vendored
View File

@ -172,7 +172,6 @@ solaris="no"
kqemu="no" kqemu="no"
profiler="no" profiler="no"
cocoa="no" cocoa="no"
check_gfx="yes"
softmmu="yes" softmmu="yes"
linux_user="no" linux_user="no"
darwin_user="no" darwin_user="no"
@ -191,6 +190,7 @@ kerneldir=""
aix="no" aix="no"
blobs="yes" blobs="yes"
fdt="yes" fdt="yes"
sdl="yes"
sdl_x11="no" sdl_x11="no"
xen="yes" xen="yes"
pkgversion="" pkgversion=""
@ -438,8 +438,6 @@ for opt do
sdl="no" ; sdl="no" ;
audio_drv_list="coreaudio `echo $audio_drv_list | sed s,coreaudio,,g`" audio_drv_list="coreaudio `echo $audio_drv_list | sed s,coreaudio,,g`"
;; ;;
--disable-gfx-check) check_gfx="no"
;;
--disable-system) softmmu="no" --disable-system) softmmu="no"
;; ;;
--enable-system) softmmu="yes" --enable-system) softmmu="yes"
@ -835,7 +833,7 @@ fi
sdl_too_old=no sdl_too_old=no
if test -z "$sdl" ; then if test "$sdl" = "yes" ; then
sdl_config="sdl-config" sdl_config="sdl-config"
sdl=no sdl=no
sdl_static=no sdl_static=no
@ -1346,10 +1344,6 @@ echo "preadv support $preadv"
if test $sdl_too_old = "yes"; then if test $sdl_too_old = "yes"; then
echo "-> Your SDL version is too old - please upgrade to have SDL support" echo "-> Your SDL version is too old - please upgrade to have SDL support"
fi fi
if [ -s $TMPSDLLOG ]; then
echo "The error log from compiling the libSDL test is: "
cat $TMPSDLLOG
fi
#if test "$sdl_static" = "no"; then #if test "$sdl_static" = "no"; then
# echo "WARNING: cannot compile statically with SDL - qemu-fast won't have a graphical output" # echo "WARNING: cannot compile statically with SDL - qemu-fast won't have a graphical output"
#fi #fi
@ -1772,15 +1766,6 @@ case "$target" in
;; ;;
esac 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" #echo "Creating $config_mak, $config_h and $target_dir/Makefile"
test -f $config_h && mv $config_h ${config_h}~ test -f $config_h && mv $config_h ${config_h}~

View File

@ -320,6 +320,7 @@ void vnc_display_close(DisplayState *ds);
int vnc_display_open(DisplayState *ds, const char *display); int vnc_display_open(DisplayState *ds, const char *display);
int vnc_display_password(DisplayState *ds, const char *password); int vnc_display_password(DisplayState *ds, const char *password);
void do_info_vnc(Monitor *mon); void do_info_vnc(Monitor *mon);
char *vnc_display_local_addr(DisplayState *ds);
/* curses.c */ /* curses.c */
void curses_display_init(DisplayState *ds, int full_screen); void curses_display_init(DisplayState *ds, int full_screen);

41
vl.c
View File

@ -203,7 +203,7 @@ enum vga_retrace_method vga_retrace_method = VGA_RETRACE_DUMB;
static DisplayState *display_state; static DisplayState *display_state;
int nographic; int nographic;
static int curses; static int curses;
static int sdl; static int sdl = 1;
const char* keyboard_layout = NULL; const char* keyboard_layout = NULL;
int64_t ticks_per_sec; int64_t ticks_per_sec;
ram_addr_t ram_size; ram_addr_t ram_size;
@ -5952,25 +5952,36 @@ int main(int argc, char **argv, char **envp)
} }
} else { } else {
#if defined(CONFIG_CURSES) #if defined(CONFIG_CURSES)
if (curses) { if (curses) {
/* At the moment curses cannot be used with other displays */ /* At the moment curses cannot be used with other displays */
curses_display_init(ds, full_screen); curses_display_init(ds, full_screen);
} else } else
#endif #endif
{ #if defined(CONFIG_SDL) || defined(CONFIG_COCOA)
if (vnc_display != NULL) { if (sdl) {
vnc_display_init(ds);
if (vnc_display_open(ds, vnc_display) < 0)
exit(1);
}
#if defined(CONFIG_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) #elif defined(CONFIG_COCOA)
if (sdl || !vnc_display) cocoa_display_init(ds, full_screen);
cocoa_display_init(ds, full_screen);
#endif #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); dpy_resize(ds);

8
vnc.c
View File

@ -86,7 +86,6 @@ char *vnc_socket_local_addr(const char *format, int fd) {
return addr_to_string(format, &sa, salen); return addr_to_string(format, &sa, salen);
} }
char *vnc_socket_remote_addr(const char *format, int fd) { char *vnc_socket_remote_addr(const char *format, int fd) {
struct sockaddr_storage sa; struct sockaddr_storage sa;
socklen_t salen; socklen_t salen;
@ -2101,6 +2100,13 @@ int vnc_display_password(DisplayState *ds, const char *password)
return 0; 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) int vnc_display_open(DisplayState *ds, const char *display)
{ {
VncDisplay *vs = ds ? (VncDisplay *)ds->opaque : vnc_display; VncDisplay *vs = ds ? (VncDisplay *)ds->opaque : vnc_display;