fixup! Add display server.

This commit is contained in:
Jonas 'Sortie' Termansen 2023-06-17 21:25:33 +02:00
parent c7d5b41605
commit 22be4abaa4
5 changed files with 49 additions and 47 deletions

View File

@ -25,6 +25,25 @@ script in the background.
.Nm .Nm
exits when Control + Alt + Delete is pressed. exits when Control + Alt + Delete is pressed.
.Pp .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: The keyboard shortcuts are as follows:
.Bl -tag -width "Control + Alt + Delete" .Bl -tag -width "Control + Alt + Delete"
.It Alt + F4 .It Alt + F4
@ -93,7 +112,7 @@ Applications use
to connect to to connect to
.Nm .Nm
or or
.Pa /run/display .Pa /var/run/display
by default. by default.
.El .El
.Sh FILES .Sh FILES
@ -101,7 +120,7 @@ by default.
.It Pa ~/.displayrc , /etc/displayrc , /etc/default/displayrc .It Pa ~/.displayrc , /etc/displayrc , /etc/default/displayrc
.Xr displayrc 5 .Xr displayrc 5
script that spawns the user's preferred startup applications. script that spawns the user's preferred startup applications.
.It Pa /run/display .It Pa /var/run/display
.Xr unix 4 .Xr unix 4
socket where socket where
.Nm .Nm

View File

@ -45,43 +45,23 @@ static void ready(void)
unsetenv("READYFD"); 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[]) int main(int argc, char* argv[])
{ {
for ( int i = 1; i < argc; i++ ) const char* mouse = "/dev/mouse";
{ const char* socket = "/var/run/display";
const char* arg = argv[i]; const char* tty = NULL;
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);
}
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)); memcpy(arrow_buffer, arrow, sizeof(arrow));
@ -95,7 +75,7 @@ int main(int argc, char* argv[])
display_initialize(&display); display_initialize(&display);
struct server server; struct server server;
server_initialize(&server, &display); server_initialize(&server, &display, tty, mouse, socket);
if ( setenv("DISPLAY_SOCKET", server.server_path, 1) < 0 ) if ( setenv("DISPLAY_SOCKET", server.server_path, 1) < 0 )
err(1, "setenv"); err(1, "setenv");

View File

@ -59,7 +59,8 @@ static int open_local_server_socket(const char* path, int flags)
return fd; 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)); memset(server, 0, sizeof(*server));
@ -68,18 +69,19 @@ void server_initialize(struct server* server, struct display* display)
load_font(); load_font();
server->tty_fd = 0; 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 ) 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 ) 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, server->server_fd = open_local_server_socket(server->server_path,
SOCK_NONBLOCK | SOCK_CLOEXEC); SOCK_NONBLOCK | SOCK_CLOEXEC);
if ( server->server_fd < 0 ) if ( server->server_fd < 0 )
@ -87,7 +89,7 @@ void server_initialize(struct server* server, struct display* display)
unsigned int termmode = unsigned int termmode =
TERMMODE_KBKEY | TERMMODE_UNICODE | TERMMODE_NONBLOCK; TERMMODE_KBKEY | TERMMODE_UNICODE | TERMMODE_NONBLOCK;
if ( settermmode(0, termmode) < 0 ) if ( settermmode(server->tty_fd, termmode) < 0 )
err(1, "settermmode"); err(1, "settermmode");
server->pfds_count = server_pfds_count(server); server->pfds_count = server_pfds_count(server);

View File

@ -41,7 +41,8 @@ struct server
size_t pfds_count; 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); bool server_accept(struct server* server);
size_t server_pfds_count(const struct server* server); size_t server_pfds_count(const struct server* server);
void server_poll(struct server* server); void server_poll(struct server* server);

View File

@ -100,7 +100,7 @@ struct display_connection* display_connect_default(void)
{ {
return display_connect(getenv("DISPLAY_SOCKET") ? return display_connect(getenv("DISPLAY_SOCKET") ?
getenv("DISPLAY_SOCKET") : getenv("DISPLAY_SOCKET") :
"/run/display"); "/var/run/display");
} }
void display_disconnect(struct display_connection* connection) void display_disconnect(struct display_connection* connection)