From: Lennart Poettering Date: Thu, 27 Mar 2008 01:09:49 +0000 (+0000) Subject: Add command line option to specify domain to bssh, prefer vncviewer over xvncviewer... X-Git-Url: https://git.meshlink.io/?a=commitdiff_plain;h=124c9f007617a5b4078a75843c6ee80f70186ed1;p=catta Add command line option to specify domain to bssh, prefer vncviewer over xvncviewer. Modified patch from lkundrak. Closes #197 git-svn-id: file:///home/lennart/svn/public/avahi/trunk@1758 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe --- diff --git a/avahi-ui/bssh.c b/avahi-ui/bssh.c index 3c06420..fea1071 100644 --- a/avahi-ui/bssh.c +++ b/avahi-ui/bssh.c @@ -28,6 +28,7 @@ #include #include #include +#include #include @@ -39,27 +40,128 @@ #include "avahi-ui.h" +typedef enum { + COMMAND_HELP, + COMMAND_SSH, + COMMAND_VNC, + COMMAND_SHELL +} Command; + +typedef struct Config { + char *domain; + Command command; +} Config; + +static void help(FILE *f, const char *argv0) { + fprintf(f, + _("%s [options]\n\n" + " -h --help Show this help\n" + " -s --ssh Browse SSH servers\n" + " -v --vnc Browse VNC servers\n" + " -S --shell Browse both SSH and VNC\n" + " -d --domain=DOMAIN The domain to browse in\n"), + argv0); +} + +static int parse_command_line(Config *c, int argc, char *argv[]) { + int o; + + static const struct option long_options[] = { + { "help", no_argument, NULL, 'h' }, + { "ssh", no_argument, NULL, 's' }, + { "vnc", no_argument, NULL, 'v' }, + { "shell", no_argument, NULL, 'S' }, + { "domain", required_argument, NULL, 'd' }, + { NULL, 0, NULL, 0 } + }; + + while ((o = getopt_long(argc, argv, "hVd:svS", long_options, NULL)) >= 0) { + + switch(o) { + case 'h': + c->command = COMMAND_HELP; + break; + case 's': + c->command = COMMAND_SSH; + break; + case 'v': + c->command = COMMAND_VNC; + break; + case 'S': + c->command = COMMAND_SHELL; + break; + case 'd': + avahi_free(c->domain); + c->domain = avahi_strdup(optarg); + break; + default: + return -1; + } + } + + if (optind < argc) { + fprintf(stderr, _("Too many arguments\n")); + return -1; + } + + return 0; +} + int main(int argc, char*argv[]) { GtkWidget *d; + Config config; + const char *argv0; avahi_init_i18n(); setlocale(LC_ALL, ""); + if ((argv0 = strrchr(argv[0], '/'))) + argv0++; + else + argv0 = argv[0]; + + if (g_str_has_suffix(argv[0], "bshell")) + config.command = COMMAND_SHELL; + else if (g_str_has_suffix(argv[0], "bvnc")) + config.command = COMMAND_VNC; + else + config.command = COMMAND_SSH; + + /* defaults to local */ + config.domain = NULL; + + if (parse_command_line(&config, argc, argv) < 0) { + help(stderr, argv0); + return 1; + } + gtk_init(&argc, &argv); - if (g_str_has_suffix(argv[0], "bshell")) { - d = aui_service_dialog_new(_("Choose Shell Server"), NULL, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_CONNECT, GTK_RESPONSE_ACCEPT, NULL); - aui_service_dialog_set_browse_service_types(AUI_SERVICE_DIALOG(d), "_rfb._tcp", "_ssh._tcp", NULL); - aui_service_dialog_set_service_type_name(AUI_SERVICE_DIALOG(d), "_rfb._tcp", _("Desktop")); - aui_service_dialog_set_service_type_name(AUI_SERVICE_DIALOG(d), "_ssh._tcp", _("Terminal")); - } else if (g_str_has_suffix(argv[0], "bvnc")) { - d = aui_service_dialog_new(_("Choose VNC server"), NULL, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_CONNECT, GTK_RESPONSE_ACCEPT, NULL); - aui_service_dialog_set_browse_service_types(AUI_SERVICE_DIALOG(d), "_rfb._tcp", NULL); - } else { - d = aui_service_dialog_new(_("Choose SSH server"), NULL, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_CONNECT, GTK_RESPONSE_ACCEPT, NULL); - aui_service_dialog_set_browse_service_types(AUI_SERVICE_DIALOG(d), "_ssh._tcp", NULL); + switch (config.command) { + case COMMAND_HELP: + help(stdout, argv0); + return 0; + break; + + case COMMAND_SHELL: + d = aui_service_dialog_new(_("Choose Shell Server"), NULL, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_CONNECT, GTK_RESPONSE_ACCEPT, NULL); + aui_service_dialog_set_browse_service_types(AUI_SERVICE_DIALOG(d), "_rfb._tcp", "_ssh._tcp", NULL); + aui_service_dialog_set_service_type_name(AUI_SERVICE_DIALOG(d), "_rfb._tcp", _("Desktop")); + aui_service_dialog_set_service_type_name(AUI_SERVICE_DIALOG(d), "_ssh._tcp", _("Terminal")); + break; + + case COMMAND_VNC: + d = aui_service_dialog_new(_("Choose VNC server"), NULL, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_CONNECT, GTK_RESPONSE_ACCEPT, NULL); + aui_service_dialog_set_browse_service_types(AUI_SERVICE_DIALOG(d), "_rfb._tcp", NULL); + break; + + case COMMAND_SSH: + d = aui_service_dialog_new(_("Choose SSH server"), NULL, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_CONNECT, GTK_RESPONSE_ACCEPT, NULL); + aui_service_dialog_set_browse_service_types(AUI_SERVICE_DIALOG(d), "_ssh._tcp", NULL); + break; } + aui_service_dialog_set_domain (AUI_SERVICE_DIALOG(d), config.domain); aui_service_dialog_set_resolve_service(AUI_SERVICE_DIALOG(d), TRUE); aui_service_dialog_set_resolve_host_name(AUI_SERVICE_DIALOG(d), !avahi_nss_support()); @@ -86,8 +188,9 @@ int main(int argc, char*argv[]) { gtk_widget_destroy(d); - g_print("xvncviewer %s\n", p); + g_print("vncviewer %s\n", p); execlp("xvncviewer", "xvncviewer", p, NULL); + execlp("vncviewer", "vncviewer", p, NULL); } else { char p[16]; @@ -145,5 +248,7 @@ int main(int argc, char*argv[]) { g_print(_("Canceled.\n")); } + g_free(config.domain); + return 1; } diff --git a/man/avahi-browse.1.xml.in b/man/avahi-browse.1.xml.in index b7dac7a..90b2d35 100644 --- a/man/avahi-browse.1.xml.in +++ b/man/avahi-browse.1.xml.in @@ -4,19 +4,19 @@ - - - + bssh bvnc + bshell - + -

bssh/bvnc browses for local SSH/VNC servers on the local +

bssh/bvnc/bshell browses for SSH/VNC servers on the local network, shows them in a GUI for the user to select one and - finally calls ssh/xvncviewer after a selection was made.

- + finally calls ssh/vncviewer after a selection was made.

+ +

If the binary is called as bssh only ssh servers will be shown. If the binary is called as bvnc only VNC servers will be shown. If the binary is called as bshell both VNC and SSH servers are shown.

+
- + -

bssh/bvnc takes no command line arguments at the moment.

+ + + + + + + + +
- +

The Avahi Developers <@PACKAGE_BUGREPORT@>; Avahi is available from

- +

- , , + , ,

- +

This man page was written using by Oliver Kurth.

- +