Red de conocimiento informático - Conocimiento del nombre de dominio - ¿Cómo hacer que Linux ejecute su propio programa de interfaz gráfica después del inicio en lugar de ejecutar el escritorio?

¿Cómo hacer que Linux ejecute su propio programa de interfaz gráfica después del inicio en lugar de ejecutar el escritorio?

Basado en la plataforma del sistema operativo de redhat 8.0, explica cómo iniciar sesión automáticamente y ejecutar automáticamente el programa correspondiente cuando el nivel de inicio es 3. Presenta brevemente cómo iniciar sesión automáticamente en la ventana X y ejecutar automáticamente en redhat 8.0 (sistema nivel de inicio 5).

1. Implementación del inicio de sesión automático cuando el nivel de inicio es 3

La implementación del inicio de sesión automático en el nivel de inicio 3 implica dos paquetes de software: mingetty-1.00-3.src.rpm y util. -Linux-2.11r-10.src.rpm.

(1)minge tty-1.00-3 . paquete rpm

Para la implementación del inicio de sesión automático con el nivel de inicio 3, aún necesita verificar el script /etc/inittab. .

3:123: Rebirth:/sbin/mingetty tty3

Entonces, si desea realizar el inicio de sesión automático en el inicio del nivel 3, debe comprender las funciones de Mingotty e incluso modificar el código de Mingotty. . A través del comando rpm -qf /sbin/minggetty, sabemos que el paquete Mingetty-1.00-3.src.rpm contiene la versión mingetty de redhat 8.0. Descargue este paquete e instale el código fuente. El código se instalará en /usr/src/redhat/ de forma predeterminada. Solo nos importa el archivo fuente de mingetty.c. Mingetty.c tiene alrededor de 500 líneas de código e implementa principalmente las siguientes funciones:

Abrir el tty especificado (especificado por parámetros);

Solicitar al usuario que inicie sesión (iniciar sesión:

Obtener nombre de usuario de inicio de sesión

Usar inicio de sesión de usuario; nombre como parámetro para llamar a /bin/login.

Lo que nos importa son esencialmente las siguientes tres líneas:

......

438 while((logname = get _ logname()) = = 0); //Línea 438 del archivo mingetty.c

439 execl (_PATH_LOGIN, _PATH_LOGIN, "-", logname, NULL);

440 error (" % s :No se puede ejecutar " _PATH_LOGIN ": %s ", tty, sys _ errlist [errno]);

......

La primera línea es para generar el inicio de sesión mensaje, obtenga el nombre de usuario de inicio de sesión ingresado por el usuario y el nombre de usuario de inicio de sesión se devuelve mediante nombre de registro. Por lo tanto, se pueden realizar las siguientes modificaciones.

......

438// while((logname = get _ logname())= = 0);//Comente esta línea y ya no solicite iniciar sesión:

439 logname = " root//Agregar esta línea de código

440 execl (_PATH_LOGIN, _PATH_LOGIN, "-", logname, NULL);

441 Error(" % s:can exec " _ PATH _ iniciar sesión ": % s ", tty, sys _ errlist[errno]

......

Tenga en cuenta que esto supone que el usuario ha iniciado sesión como superusuario.

La segunda línea toma el nombre de inicio de sesión del usuario como parámetro y llama al programa /bin/login para iniciar sesión. Por lo tanto, para implementar el inicio de sesión automático, también debe comprender la función / Bin/login y modificar su código fuente si es necesario

El tercer comportamiento en el manejo de errores

(2)util-Linux -2.11r-10.software src.rpm.

De manera similar, verifique el paquete de software al que pertenece /bin/login (la versión de inicio de sesión redhad8.0 está incluida en el paquete de software util-Linux-2.11r-10 . src . rpm), descárguelo e instálelo util-Linux-2.11r-6550. El archivo ejecutable de inicio de sesión se compila a partir de varios archivos fuente, el que más nos preocupa es el archivo fuente login.c (alrededor de 1500 líneas de código). Analicemos brevemente las funciones que se lograrán al iniciar sesión y realicemos las modificaciones necesarias en las partes correspondientes.

El procedimiento de inicio de sesión se puede dividir en las siguientes partes principales:

1. El inicio de sesión primero verifica si el usuario es un superusuario. Si no es un superusuario y hay un archivo /etc/nologin, genere el contenido del archivo y suspenda el proceso de inicio de sesión. Implementado principalmente por checknologin();

2. Si el usuario que inició sesión es un superusuario, el inicio de sesión debe implementarse en la lista tty especificada en /etc/securety/; de lo contrario, el inicio de sesión fallará. De manera similar, se puede omitir el archivo /etc/securety, en cuyo caso el superusuario puede iniciar sesión en cualquier tty.

3. Después de las dos primeras pruebas, el inicio de sesión le pedirá que ingrese la contraseña de inicio de sesión (llamada por getpass(), los lectores interesados ​​pueden consultar su página de manual) y verificarla. Si la contraseña es incorrecta, se le pedirá que inicie sesión nuevamente.

4. Después de pasar con éxito la verificación de contraseña, el inicio de sesión también verificará si el archivo hushlogin existe. Si existe, realice un inicio de sesión "silencioso" (el llamado inicio de sesión silencioso significa que ya no lo estará). solicitará correos electrónicos al iniciar sesión y ya no mostrará la hora del último inicio de sesión sin generar ningún mensaje. Cuando el nivel de inicio es 3, esta información se muestra normalmente)

5. y el ID de grupo del tty de inicio de sesión, y establezca las variables de entorno correspondientes, incluidas HOME, PATH, SHELL, $TERM, LOGNAME, etc. Para usuarios normales, la ruta se establece en /usr/local/bin:/bin/usr/bin de forma predeterminada: Para los superusuarios, la ruta se establece en /sbin: /bin: /usr/sbin: /usr/bin:

6.6. El último paso al iniciar sesión es iniciar un shell para el usuario. Si no se especifica ningún shell para el usuario en /etc/passwd, se utilizará /bin/sh. Si el directorio de trabajo actual no se proporciona en /etc/passwd, se utilizará "/".

En este punto, finaliza un proceso de inicio de sesión completo.

Del análisis anterior del programa fuente de inicio de sesión, podemos encontrar que si desea lograr un inicio de sesión automático, debe concentrarse en el tercer paso e intentar omitir el proceso de solicitar el ingreso y la verificación de la contraseña. . En realidad es muy simple. El programa fuente de inicio de sesión establece el interruptor para ingresar una contraseña para controlar passwd_req. De forma predeterminada, su valor es 1 (passwd_req = 1), lo que significa que se requiere una contraseña para la autenticación. Después de cambiar el código de línea a (passwd_req = 0), el problema se resolvió. En otras palabras, el archivo fuente se puede modificar de la siguiente manera:

......

402 ff lag = hflag = pflag = 0 //login.c file line; 402

403 //passwd_req = 1 //De forma predeterminada, se requiere verificación de contraseña y esta línea está comentada.

404 passwd_req = 0 //Agrega esta línea.

...

Después de la modificación, puede volver a compilar directamente utilizando el Makefile proporcionado por util-Linux-2.11r-10, o puede volver a compilarlo usted mismo. :

Gcc -o iniciar sesión. csetproctítulo. cccheck. cxtrntcpy. c-pared -lcrypt. Tenga cuidado de incluir la siguiente opción de compilación -lcrypt; de lo contrario, habrá problemas.

Con la nueva versión de mingetty e inicie sesión, copie mingetty al directorio /sbin/, copie el inicio de sesión al directorio /bin, establezca el nivel de inicio en /etc/inittab en 3 y luego reinicie el sistema. (Los lectores pueden escribir un guión para implementar el proceso anterior).

Si los lectores están interesados ​​en otras partes de mingetty o del código de inicio de sesión, pueden modificar repetidamente el código fuente de login.c o mingetty.c para probar la función del código. Lo que debe tenerse en cuenta aquí es que antes de copiar la nueva versión de mingetty e iniciar sesión, debe hacer una copia de seguridad del mingetty e iniciar sesión original, y preparar el disco de inicio del sistema (el disco de instalación del sistema también es aceptable). Esto brinda a los lectores la oportunidad de escribir Linux Rescue, especialmente antes de probar una nueva versión del programa. Si el código se modifica ligeramente de forma incorrecta, el sistema no se iniciará correctamente.

Si no desea realizar más pruebas de código, simplemente modifique el código de acuerdo con el método proporcionado en este artículo y no habrá problemas en el inicio del sistema.

En segundo lugar, después del inicio de sesión automático, las aplicaciones específicas se ejecutarán automáticamente.

Después de activar el inicio de sesión automático de nivel 3, es muy sencillo ejecutar automáticamente la aplicación. Simplemente agregue la aplicación al script /etc/rc.d/rc.local. Los lectores pueden intentar agregar startx al script y ver cómo funciona. En cierto sentido, se ha agregado un método para iniciar sesión automáticamente en la ventana X. )

3. Complemente el inicio de sesión automático en la ventana X (el nivel de inicio del sistema es el nivel 5) y ejecute automáticamente las aplicaciones específicas.

En "Cómo implementar el inicio de sesión automático en Linux", la descripción se basa principalmente en la plataforma redhat 7.2. La parte de inicio de sesión automático se puede utilizar directamente en redhat 8.0 sin ninguna modificación.

Pero la interfaz para ejecutar aplicaciones automáticamente después de iniciar sesión en redhat 8.0 es diferente, principalmente porque después de iniciar sesión en gnome, la interfaz para ejecutar aplicaciones automáticamente ha cambiado: primero haga clic en la Ayuda de GNOME (Caperucita Roja ) en el panel), luego seleccione /Otros/Preferencias/Sesión y agregue el programa que se iniciará en la página de propiedades del Iniciador del cuadro de diálogo de la sesión.

Después de iniciar sesión en kde, la interfaz para ejecutar programas automáticamente no cambia.

Cuatro. Conclusión

Este artículo, combinado con el artículo "Cómo iniciar sesión automáticamente en Linux", básicamente resuelve el problema de cómo iniciar sesión automáticamente en Linux y ejecutar automáticamente la aplicación correspondiente. Para los dos niveles de inicio más comunes (3, 5), se proporcionan los métodos respectivos.

En las etapas desde la inicialización del sistema hasta mingetty e inicio de sesión, el kernel realmente completó el proceso de arranque y alcanzó la etapa más alta de inicialización del sistema, que no tiene nada que ver con el kernel. En este momento, /sbin/init opera principalmente en función del contenido de /etc/inittab. Los lectores pueden obtener más información a través de (man 8 init) o ​​(man 5 inittab).

Al modificar los paquetes de software mencionados en este artículo, cumpla con los estándares pertinentes de la Licencia Pública General GNU (GPL). Además, reemplazar los inicios de sesión a menudo se considera piratería y debe manejarse con precaución.

Referencia

1. Página del manual de inicio de sesión

2. Mingetty-1.00-3.src.rpm, incluido en el código fuente de la versión redhat 8.0. /p>

3.util-Linux-2.11r-10.src.rpm,

Pero tengo contacto con él