From 124c9f007617a5b4078a75843c6ee80f70186ed1 Mon Sep 17 00:00:00 2001
From: Lennart Poettering
Date: Thu, 27 Mar 2008 01:09:49 +0000
Subject: [PATCH] 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
---
avahi-ui/bssh.c | 129 ++++++++++++++++++++++++++++++++++----
man/avahi-browse.1.xml.in | 24 +++----
man/bssh.1.xml.in | 60 +++++++++++++-----
3 files changed, 173 insertions(+), 40 deletions(-)
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.
+
+ -s | --ssh
+ Browse for SSH servers (and only SSH servers) regardless under which name the binary is called.
+
+
+
+ -v | --vnc
+ Browse for VNC servers (and only VNC servers) regardless under which name the binary is called.
+
+
+
+ -S | --shell
+ Browse for both VNC and SSH servers regardless under which name the binary is called.
+
+
+
+ -d | --domain= DOMAIN
+ Browse in the specified domain. If omitted
+ bssh/bvnc/bshell will browse in the default browsing domain
+ (usually .local)
+
+
+
+ -h | --help
+ Show help.
+
-
+
The Avahi Developers <@PACKAGE_BUGREPORT@>; Avahi is
available from
-
+
-
+
This man page was written using by Oliver Kurth.
-
+
--
2.39.5