qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] Re: [PATCH 2/7] Introduce -display argument


From: Anthony Liguori
Subject: [Qemu-devel] Re: [PATCH 2/7] Introduce -display argument
Date: Tue, 15 Mar 2011 09:51:43 -0500
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.14) Gecko/20110223 Lightning/1.0b2 Thunderbird/3.1.8

On 03/15/2011 07:36 AM, address@hidden wrote:
From: Jes Sorensen<address@hidden>

This patch introduces a -display argument which consolidates the
setting of the display mode. Valid options are:
sdl/curses/default/serial (serial is equivalent to -nographic)

Signed-off-by: Jes Sorensen<address@hidden>
---
  qemu-options.hx |   27 +++++++++++++++++++
  vl.c            |   77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
  2 files changed, 104 insertions(+), 0 deletions(-)

diff --git a/qemu-options.hx b/qemu-options.hx
index badb730..f08ffb1 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -590,6 +590,33 @@ STEXI
  @table @option
  ETEXI

+DEF("display", HAS_ARG, QEMU_OPTION_display,
+    "-display sdl[,frame=on|off][,alt_grab=on|off][,ctrl_grab=on|off]\n"
+    "            [,window_close=on|off]|curses|serial\n"
+    "                select display type\n", QEMU_ARCH_ALL)
+STEXI
address@hidden -display @var{type}
address@hidden -display
+Select type of display to use. This option is a replacement for the
+old style -sdl/-curses/... options. Valid values for @var{type} are
address@hidden @option
address@hidden sdl
+Pick the SDL display option.
address@hidden curses
+Pick the curses display option. Normally, QEMU uses SDL to display the
+VGA output.  With this option, QEMU can display the VGA output when in
+text mode using a curses/ncurses interface.  Nothing is displayed in
+graphical mode.
address@hidden serial
+Normally, QEMU uses SDL to display the VGA output. With this option,
+you can totally disable graphical output so that QEMU is a simple
+command line application. The emulated serial port is redirected on
+the console. Therefore, you can still use QEMU to debug a Linux kernel
+with a serial console. This option is equivalent to the old -nographic
+argument.
address@hidden table
+ETEXI
+
  DEF("nographic", 0, QEMU_OPTION_nographic,
      "-nographic      disable graphical output and redirect serial I/Os to 
console\n",
      QEMU_ARCH_ALL)
diff --git a/vl.c b/vl.c
index 5e007a7..c88ee58 100644
--- a/vl.c
+++ b/vl.c
@@ -1554,6 +1554,80 @@ static void select_vgahw (const char *p)
      }
  }

+static DisplayType select_display(const char *p)
+{
+    const char *opts;
+    DisplayType display = DT_DEFAULT;
+
+    if (strstart(p, "sdl",&opts)) {
+#ifdef CONFIG_SDL
+        display = DT_SDL;
+        while (*opts) {
+            const char *nextopt;
+
+            if (strstart(opts, ",frame=",&nextopt)) {
+                opts = nextopt;
+                if (strstart(opts, "on",&nextopt)) {
+                    no_frame = 0;
+                } else if (strstart(opts, "off",&nextopt)) {
+                    no_frame = 1;
+                } else {
+                    goto invalid_display;
+                }
+            } else if (strstart(opts, ",alt_grab=",&nextopt)) {
+                opts = nextopt;
+                if (strstart(opts, "on",&nextopt)) {
+                    alt_grab = 1;
+                } else if (strstart(opts, "off",&nextopt)) {
+                    alt_grab = 0;
+                } else {
+                    goto invalid_display;
+                }
+            } else if (strstart(opts, ",ctrl_grab=",&nextopt)) {
+                opts = nextopt;
+                if (strstart(opts, "on",&nextopt)) {
+                    ctrl_grab = 1;
+                } else if (strstart(opts, "off",&nextopt)) {
+                    ctrl_grab = 0;
+                } else {
+                    goto invalid_display;
+                }
+            } else if (strstart(opts, ",window_close=",&nextopt)) {
+                opts = nextopt;
+                if (strstart(opts, "on",&nextopt)) {
+                    no_quit = 0;
+                } else if (strstart(opts, "off",&nextopt)) {
+                    no_quit = 1;
+                } else {
+                    goto invalid_display;
+                }
+            } else {
+                goto invalid_display;
+            }
+            opts = nextopt;
+        }

So the natural reaction here is going to be, "just use QemuOpts". But this is harder than it seems. The problem is that the VNC options inverse the meaning of booleans making conversion of VNC to use QemuOpts much harder than it would appear.

Doing it this way lets us pass the vnc option string directly to vnc_display_open(). I don't like it much, but I don't mind it as an interim step.

Regards,

Anthony Liguori

+#else
+        fprintf(stderr, "SDL support is disabled\n");
+        exit(1);
+#endif
+    } else if (strstart(p, "curses",&opts)) {
+#ifdef CONFIG_CURSES
+        display = DT_CURSES;
+#else
+        fprintf(stderr, "Curses support is disabled\n");
+        exit(1);
+#endif
+    } else if (strstart(p, "serial",&opts)) {
+        display = DT_NOGRAPHIC;
+    } else {
+    invalid_display:
+        fprintf(stderr, "Unknown display type: %s\n", p);
+        exit(1);
+    }
+
+    return display;
+}
+
  static int balloon_parse(const char *arg)
  {
      QemuOpts *opts;
@@ -2152,6 +2226,9 @@ int main(int argc, char **argv, char **envp)
                  }
                  numa_add(optarg);
                  break;
+            case QEMU_OPTION_display:
+                display_type = select_display(optarg);
+                break;
              case QEMU_OPTION_nographic:
                  display_type = DT_NOGRAPHIC;
                  break;




reply via email to

[Prev in Thread] Current Thread [Next in Thread]