--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 <[email protected]>
kqemu="no"
profiler="no"
cocoa="no"
-check_gfx="yes"
softmmu="yes"
linux_user="no"
darwin_user="no"
aix="no"
blobs="yes"
fdt="yes"
+sdl="yes"
sdl_x11="no"
xen="yes"
pkgversion=""
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"
sdl_too_old=no
-if test -z "$sdl" ; then
+if test "$sdl" = "yes" ; then
sdl_config="sdl-config"
sdl=no
sdl_static=no
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
;;
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}~
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);
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;
}
} 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);
return addr_to_string(format, &sa, salen);
}
-
char *vnc_socket_remote_addr(const char *format, int fd) {
struct sockaddr_storage sa;
socklen_t salen;
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;