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