added dbus support

This commit is contained in:
cylgom 2017-08-23 10:07:06 +02:00
parent 23aa373f27
commit ed477e61e3
2 changed files with 31 additions and 14 deletions

View File

@ -26,7 +26,7 @@
#define LY_CMD_X "/usr/bin/X" #define LY_CMD_X "/usr/bin/X"
#define LY_CMD_TPUT "/usr/bin/tput" #define LY_CMD_TPUT "/usr/bin/tput"
#define LY_CMD_HALT "/sbin/shutdown" #define LY_CMD_HALT "/sbin/shutdown"
#define LY_CMD_XINITRC ".xinitrc" #define LY_CMD_XINITRC "~/.xinitrc"
#define LY_CMD_MCOOKIE "/usr/bin/mcookie" #define LY_CMD_MCOOKIE "/usr/bin/mcookie"
#define LY_XAUTHORITY ".lyxauth" #define LY_XAUTHORITY ".lyxauth"

View File

@ -434,11 +434,12 @@ const char* de_command, enum deserv_t display_server)
} }
void launch_xorg(struct passwd* pwd, pam_handle_t* pam_handle, void launch_xorg(struct passwd* pwd, pam_handle_t* pam_handle,
const char* de_command, const char* display_name, const char* vt, int xinitrc) const char* de_command, const char* display_name, const char* vt,
int xinitrc)
{ {
FILE* file; FILE* file;
pid_t xauth_pid; pid_t child;
int xauth_status; int status;
char cmd[LY_LIM_CMD]; char cmd[LY_LIM_CMD];
/* updates cookie */ /* updates cookie */
snprintf(cmd, sizeof(cmd), "exec xauth add %s . `%s`", display_name, snprintf(cmd, sizeof(cmd), "exec xauth add %s . `%s`", display_name,
@ -447,22 +448,38 @@ const char* de_command, const char* display_name, const char* vt, int xinitrc)
file = fopen(getenv("XAUTHORITY"), "ab+"); file = fopen(getenv("XAUTHORITY"), "ab+");
fclose(file); fclose(file);
/* generates the cookie */ /* generates the cookie */
xauth_pid = fork(); child = fork();
if(xauth_pid == 0) if(child == 0)
{ {
execl(pwd->pw_shell, pwd->pw_shell, "-c", cmd, NULL); execl(pwd->pw_shell, pwd->pw_shell, "-c", cmd, NULL);
exit(0); exit(0);
} }
waitpid(xauth_pid, &xauth_status, 0); waitpid(child, &status, 0);
reset_terminal(pwd); /* starts X */
/* starts session */ child = fork();
snprintf(cmd, sizeof(cmd),
"exec xinit %s%s -- %s %s %s -auth %s", xinitrc ? "~/" : "/usr/bin/", de_command, LY_CMD_X, if(child == 0)
display_name, vt, getenv("XAUTHORITY")); {
execl(pwd->pw_shell, pwd->pw_shell, "-c", cmd, NULL); reset_terminal(pwd);
exit(0); /* starts session */
snprintf(cmd, sizeof(cmd),
"exec xinit %s%s -- %s %s %s -auth %s", xinitrc ? "" : "/usr/bin/",
de_command, LY_CMD_X,
display_name, vt, getenv("XAUTHORITY"));
execl(pwd->pw_shell, pwd->pw_shell, "-c", cmd, NULL);
exit(0);
}
else
{
/* handles DBus */
snprintf(cmd, sizeof(cmd),
"exec dbus-launch --exit-with-session %s", de_command);
waitpid(child, &status, 0);
execl(pwd->pw_shell, "-c", cmd, NULL);
exit(0);
}
} }
void launch_wayland(struct passwd* pwd, pam_handle_t* pam_handle, void launch_wayland(struct passwd* pwd, pam_handle_t* pam_handle,