fixed .xinitrc support

This commit is contained in:
cylgom 2017-08-20 15:07:07 +02:00
parent f521202310
commit 22f906bc3e
5 changed files with 11 additions and 7 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 "exec /bin/bash --login ~/.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

@ -98,7 +98,7 @@ struct delist_t* init_list(int count)
list->props[0].cmd = strdup(""); list->props[0].cmd = strdup("");
list->props[0].type = shell; list->props[0].type = shell;
list->props[1].cmd = strdup(LY_CMD_XINITRC); list->props[1].cmd = strdup(LY_CMD_XINITRC);
list->props[1].type = xorg; list->props[1].type = xinitrc;
return list; return list;
} }

View File

@ -1,7 +1,7 @@
#ifndef _DESKTOP_H_ #ifndef _DESKTOP_H_
#define _DESKTOP_H_ #define _DESKTOP_H_
enum deserv_t {shell, xorg, wayland}; enum deserv_t {shell, xorg, xinitrc, wayland};
struct deprops_t struct deprops_t
{ {

View File

@ -339,8 +339,12 @@ const char* de_command, enum deserv_t display_server)
break; break;
case xorg: case xorg:
launch_xorg(pwd, login_handle, de_command, display_name, vt, 0);
break;
case xinitrc:
default : default :
launch_xorg(pwd, login_handle, de_command, display_name, vt); launch_xorg(pwd, login_handle, de_command, display_name, vt, 1);
break; break;
} }
@ -430,7 +434,7 @@ 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) const char* de_command, const char* display_name, const char* vt, int xinitrc)
{ {
FILE* file; FILE* file;
pid_t xauth_pid; pid_t xauth_pid;
@ -455,7 +459,7 @@ const char* de_command, const char* display_name, const char* vt)
reset_terminal(pwd); reset_terminal(pwd);
/* starts session */ /* starts session */
snprintf(cmd, sizeof(cmd), snprintf(cmd, sizeof(cmd),
"exec xinit /usr/bin/%s -- %s %s %s -auth %s", de_command, LY_CMD_X, "exec xinit %s%s -- %s %s %s -auth %s", xinitrc ? "~/" : "/usr/bin/", de_command, LY_CMD_X,
display_name, vt, getenv("XAUTHORITY")); display_name, vt, getenv("XAUTHORITY"));
execl(pwd->pw_shell, pwd->pw_shell, "-c", cmd, NULL); execl(pwd->pw_shell, pwd->pw_shell, "-c", cmd, NULL);
exit(0); exit(0);

View File

@ -10,7 +10,7 @@ struct pam_response** resp, void* appdata_ptr);
int start_env(const char* username, const char* password, int start_env(const char* username, const char* password,
const char* de_command, enum deserv_t display_server); 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); const char* de_command, const char* display_name, const char* vt, int xinitrc);
void launch_wayland(struct passwd* pwd, pam_handle_t* pam_handle, void launch_wayland(struct passwd* pwd, pam_handle_t* pam_handle,
const char* de_command); const char* de_command);
void launch_shell(struct passwd* pwd, pam_handle_t* pam_handle); void launch_shell(struct passwd* pwd, pam_handle_t* pam_handle);