fixup! Add display server.
This commit is contained in:
parent
c7d5b41605
commit
22be4abaa4
|
@ -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
|
||||||
|
|
|
@ -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");
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue