diff --git a/display/display.1 b/display/display.1 index 2bc4b8a8..2af391fc 100644 --- a/display/display.1 +++ b/display/display.1 @@ -25,6 +25,25 @@ script in the background. .Nm exits when Control + Alt + Delete is pressed. .Pp +The options are as follows: +.Bl -tag -width "12345678" +.It Fl m Ar mouse +Use +.Pa mouse +device instead of +.Pa /dev/mouse . +.It Fl t Ar tty +Use +.Pa tty +device instead of +.Pa /dev/tty . +.It Fl s Ar socket +Listen on +.Pa socket +instead of +.Pa /var/run/display . +.El +.Pp The keyboard shortcuts are as follows: .Bl -tag -width "Control + Alt + Delete" .It Alt + F4 @@ -93,7 +112,7 @@ Applications use to connect to .Nm or -.Pa /run/display +.Pa /var/run/display by default. .El .Sh FILES @@ -101,7 +120,7 @@ by default. .It Pa ~/.displayrc , /etc/displayrc , /etc/default/displayrc .Xr displayrc 5 script that spawns the user's preferred startup applications. -.It Pa /run/display +.It Pa /var/run/display .Xr unix 4 socket where .Nm diff --git a/display/display.c b/display/display.c index 67923889..a18312e8 100644 --- a/display/display.c +++ b/display/display.c @@ -45,43 +45,23 @@ static void ready(void) unsetenv("READYFD"); } -static void compact_arguments(int* argc, char*** argv) -{ - for ( int i = 0; i < *argc; i++ ) - { - while ( i < *argc && !(*argv)[i] ) - { - for ( int n = i; n < *argc; n++ ) - (*argv)[n] = (*argv)[n+1]; - (*argc)--; - } - } -} - int main(int argc, char* argv[]) { - for ( int i = 1; i < argc; i++ ) - { - const char* arg = argv[i]; - if ( arg[0] != '-' || !arg[1] ) - continue; - argv[i] = NULL; - if ( !strcmp(arg, "--") ) - break; - if ( arg[1] != '-' ) - { - char c; - while ( (c = *++arg) ) switch ( c ) - { - default: - errx(1, "unknown option -- '%c'", c); - } - } - else - errx(1, "unknown option: %s", arg); - } + const char* mouse = "/dev/mouse"; + const char* socket = "/var/run/display"; + const char* tty = NULL; - compact_arguments(&argc, &argv); + int opt; + while ( (opt = getopt(argc, argv, "m:s:t")) != -1 ) + { + switch ( opt ) + { + case 'm': mouse = optarg; break; + case 's': socket = optarg; break; + case 't': tty = optarg; break; + default: return 1; + } + } memcpy(arrow_buffer, arrow, sizeof(arrow)); @@ -95,7 +75,7 @@ int main(int argc, char* argv[]) display_initialize(&display); struct server server; - server_initialize(&server, &display); + server_initialize(&server, &display, tty, mouse, socket); if ( setenv("DISPLAY_SOCKET", server.server_path, 1) < 0 ) err(1, "setenv"); diff --git a/display/server.c b/display/server.c index d2b5db62..028f6eae 100644 --- a/display/server.c +++ b/display/server.c @@ -59,7 +59,8 @@ static int open_local_server_socket(const char* path, int flags) return fd; } -void server_initialize(struct server* server, struct display* display) +void server_initialize(struct server* server, struct display* display, + const char* tty, const char* mouse, const char* socket) { memset(server, 0, sizeof(*server)); @@ -68,18 +69,19 @@ void server_initialize(struct server* server, struct display* display) load_font(); server->tty_fd = 0; - if ( !isatty(server->tty_fd) ) + if ( tty || !isatty(server->tty_fd) ) { - server->tty_fd = open("/dev/tty", O_RDONLY); + tty = tty ? tty : "/dev/tty"; + server->tty_fd = open(tty, O_RDONLY); if ( server->tty_fd < 0 ) - err(1, "/dev/tty"); + err(1, tty); } - server->mouse_fd = open("/dev/mouse", O_RDONLY | O_CLOEXEC); + server->mouse_fd = open(mouse, O_RDONLY | O_CLOEXEC); if ( server->mouse_fd < 0 ) - err(1, "%s", "/dev/mouse"); + err(1, "%s", mouse); - server->server_path = "/run/display"; + server->server_path = socket; server->server_fd = open_local_server_socket(server->server_path, SOCK_NONBLOCK | SOCK_CLOEXEC); if ( server->server_fd < 0 ) @@ -87,7 +89,7 @@ void server_initialize(struct server* server, struct display* display) unsigned int termmode = TERMMODE_KBKEY | TERMMODE_UNICODE | TERMMODE_NONBLOCK; - if ( settermmode(0, termmode) < 0 ) + if ( settermmode(server->tty_fd, termmode) < 0 ) err(1, "settermmode"); server->pfds_count = server_pfds_count(server); diff --git a/display/server.h b/display/server.h index f03cbeef..a1973153 100644 --- a/display/server.h +++ b/display/server.h @@ -41,7 +41,8 @@ struct server size_t pfds_count; }; -void server_initialize(struct server* server, struct display* display); +void server_initialize(struct server* server, struct display* display, + const char* tty, const char* mouse, const char* socket); bool server_accept(struct server* server); size_t server_pfds_count(const struct server* server); void server_poll(struct server* server); diff --git a/libdisplay/libdisplay.c b/libdisplay/libdisplay.c index 7bab3c26..076a684a 100644 --- a/libdisplay/libdisplay.c +++ b/libdisplay/libdisplay.c @@ -100,7 +100,7 @@ struct display_connection* display_connect_default(void) { return display_connect(getenv("DISPLAY_SOCKET") ? getenv("DISPLAY_SOCKET") : - "/run/display"); + "/var/run/display"); } void display_disconnect(struct display_connection* connection)