Patchwork [1/5] Introduce -display argument

login
register
mail settings
Submitter Jes Sorensen
Date March 14, 2011, 12:28 p.m.
Message ID <1300105726-25937-2-git-send-email-Jes.Sorensen@redhat.com>
Download mbox | patch
Permalink /patch/86727/
State New
Headers show

Comments

Jes Sorensen - March 14, 2011, 12:28 p.m.
From: Jes Sorensen <Jes.Sorensen@redhat.com>

This patch introduces a -display argument which consolidates the
setting of the display mode. Valid options are:
sdl/curses/default/nographic

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
---
 qemu-options.hx |   28 ++++++++++++++++++++++++++++
 vl.c            |   34 ++++++++++++++++++++++++++++++++++
 2 files changed, 62 insertions(+), 0 deletions(-)
Peter Maydell - March 14, 2011, 12:40 p.m.
On 14 March 2011 12:28,  <Jes.Sorensen@redhat.com> wrote:
> This patch introduces a -display argument which consolidates the
> setting of the display mode. Valid options are:
> sdl/curses/default/nographic

I wasn't expecting to see "nographic" as an option here -- my
preference would be to retain the existing '-nographic' switch
for backwards-compatibility, but '-display foo' should only
affect the video type. (ie the equivalent of '-nographic' ought
to be a set of options including '-display none', '-serial mon:stdio'
and so on, not a single '-display:nographic').

-- PMM
Jes Sorensen - March 14, 2011, 12:41 p.m.
On 03/14/11 13:40, Peter Maydell wrote:
> On 14 March 2011 12:28,  <Jes.Sorensen@redhat.com> wrote:
>> This patch introduces a -display argument which consolidates the
>> setting of the display mode. Valid options are:
>> sdl/curses/default/nographic
> 
> I wasn't expecting to see "nographic" as an option here -- my
> preference would be to retain the existing '-nographic' switch
> for backwards-compatibility, but '-display foo' should only
> affect the video type. (ie the equivalent of '-nographic' ought
> to be a set of options including '-display none', '-serial mon:stdio'
> and so on, not a single '-display:nographic').

It would be easy to remove it from the -display option, but I think it
is fair to keep it in. I was pretty much trying to cover every DT_foo
option we have. If nographic is going away as a display option, we
should make it in the code that it is for legacy support only.

Cheers,
Jes
Anthony Liguori - March 14, 2011, 1:37 p.m.
On 03/14/2011 07:28 AM, Jes.Sorensen@redhat.com wrote:
> From: Jes Sorensen<Jes.Sorensen@redhat.com>
>
> This patch introduces a -display argument which consolidates the
> setting of the display mode. Valid options are:
> sdl/curses/default/nographic
>
> Signed-off-by: Jes Sorensen<Jes.Sorensen@redhat.com>

I'd suggest using 'serial' instead of 'nographic' as that makes it more 
obvious to the user that they need to configure a serial session.

I would drop 'default' for no other reason than we don't really expose 
default as a choice anywhere else and I'm struggling to justify it to 
myself.

I think we also need to leave room to make -display take per-display 
specific parameters via QemuOpts.  That said, converting -vnc to 
QemuOpts is hard so what I'd suggest doing is just cheating for the 
moment.  Document the option to take per-display args after the main 
display, and then do something like:

if (strstarts(optarg, "vnc,", &p)) {
      vnc_display_init(p);
}

We have a bunch of little stupid SDL options like -sdl-no-frame and it 
would be good to eventually be able to express that as -display 
sdl,frame=off

Regards,

Anthony Liguori

Patch

diff --git a/qemu-options.hx b/qemu-options.hx
index badb730..f14ff02 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -590,6 +590,34 @@  STEXI
 @table @option
 ETEXI
 
+DEF("display", HAS_ARG, QEMU_OPTION_display,
+    "-display [default|sdl|curses|nographic|none]\n"
+    "                select display type\n", QEMU_ARCH_ALL)
+STEXI
+@item -display @var{type}
+@findex -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
+@table @option
+@item default
+Pick the default display option. This will depend on how QEMU was
+configured. (This one is the default)
+@item sdl
+Pick the SDL display option.
+@item 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.
+@item nographic
+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.
+@end 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..e797e61 100644
--- a/vl.c
+++ b/vl.c
@@ -1554,6 +1554,37 @@  static void select_vgahw (const char *p)
     }
 }
 
+static DisplayType select_display(const char *p)
+{
+    const char *opts;
+    DisplayType display = DT_DEFAULT;
+
+    if (strstart(p, "default", &opts)) {
+        display = DT_DEFAULT;
+    } else if (strstart(p, "sdl", &opts)) {
+#ifdef CONFIG_SDL
+        display = DT_SDL;
+#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, "nographic", &opts)) {
+        display = DT_NOGRAPHIC;
+    } else {
+        fprintf(stderr, "Unknown display type: %s\n", p);
+        exit(1);
+    }
+
+    return display;
+}
+
 static int balloon_parse(const char *arg)
 {
     QemuOpts *opts;
@@ -2152,6 +2183,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;