Red de conocimiento informático - Conocimiento del nombre de dominio - ¿Cómo hacer que Linux ejecute el programa GUI que usted escribió en lugar de ejecutar el escritorio después de iniciar?

¿Cómo hacer que Linux ejecute el programa GUI que usted escribió en lugar de ejecutar el escritorio después de iniciar?

Basado en la plataforma del sistema operativo redhat 8.0, este artículo presenta cómo realizar el inicio de sesión automático con el nivel de inicio 3 y ejecutar automáticamente el programa correspondiente. También presenta brevemente cómo iniciar sesión automáticamente en la ventana X en redhat 8.0 (nivel de inicio del sistema 5). Y ejecutará automáticamente la aplicación especificada.

I. Implementar el inicio de sesión automático en el nivel de arranque 3

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

(1) paquete de software mingetty-1.00-3.src.rpm

Para lograr el inicio de sesión automático en el nivel de inicio 3, aún necesita ver el script /etc/inittab,

3:123:respawn:/sbin/minggetty tty3

Por lo tanto, si desea implementar el inicio de sesión automático en el nivel de inicio 3, debe comprender el papel de mingetty e incluso modificarlo. código. Utilice el comando rpm -qf /sbin/minggetty para saber que la versión redhat 8.0 de mingetty está incluida en el paquete mingetty-1.00-3.src.rpm. Descargue el paquete e instale el código fuente. instalado en el directorio /usr /src/redhat/, y lo que nos importa es solo el archivo fuente mingetty.c. mingetty.c tiene alrededor de quinientas líneas de código, que implementan principalmente las siguientes funciones:

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

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

Obtenga el nombre de usuario de inicio de sesión;

Tome el nombre de inicio de sesión del usuario como parámetro y llame a /bin/login.

La parte que nos importa son básicamente 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 función de la primera línea es generar el inicio de sesión solicitar y obtener la entrada del usuario El nombre de usuario de inicio de sesión devuelto por logname. Por lo tanto, se pueden realizar los siguientes cambios

... ...

438 // while ((logname = get_logname ()) == 0 // Comenta esto); línea y dejar de solicitar el inicio de sesión:

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

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

Error 441 ("%s: no se puede ejecutar " _PATH_LOGIN ": %s", tty, sys_errlist[errno]);

... .. .

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

La segunda línea permite además iniciar sesión llamando al programa /bin/login con el nombre de inicio de sesión del usuario como parámetro. Por lo tanto, para implementar el inicio de sesión automático, también debe comprender las funciones de /bin/login y modificar su código fuente si es necesario.

El tercer comportamiento es el manejo de errores.

(2) paquete de software util-linux-2.11r-10.src.rpm

Utilice el mismo método para ver el paquete de software al que pertenece /bin/login (util- Linux: el paquete de software 2.11r-10.src.rpm contiene la versión redhad 8.0 de inicio de sesión), descargue e instale util-linux-2.11r-10.src.rpm, el archivo ejecutable de inicio de sesión se compila a partir de múltiples archivos fuente, entre los cuales Lo que más nos preocupa es el archivo fuente login.c (alrededor de 1500 líneas de código). A continuación se realiza un breve análisis de las funciones a implementar mediante login, así como las modificaciones necesarias en las partes correspondientes.

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

1. Al iniciar sesión, primero verifique si el usuario que inició sesión es un superusuario. el archivo /etc/nologin existe, genera el contenido del archivo y finaliza el proceso de inicio de sesión, implementado principalmente por checknologin();

2. Si el usuario que inicia sesión es un superusuario, debe serlo. implementado en la lista tty especificada en /etc/securetty/ Inicie sesión; de lo contrario, el inicio de sesión fallará. También es posible no especificar el archivo /etc/securetty, en cuyo caso el superusuario puede iniciar sesión en cualquier tty.

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

4. Después de verificar con éxito la contraseña, el dispositivo de inicio de sesión también verificará si el archivo .hushlogin existe. Si el archivo existe, se realizará un inicio de sesión "silencioso" (el llamado inicio de sesión silencioso significa que). el dispositivo de inicio de sesión ya no solicitará correos electrónicos y no se mostrará nuevamente la hora del último inicio de sesión y no se generará ningún mensaje (el llamado inicio de sesión "silencioso" significa que no se solicitará ningún correo electrónico al iniciar sesión, el último). la hora de inicio de sesión no se mostrará y no se generará ninguna información.

5. Iniciar sesión A continuación, configure el ID de usuario y el ID de grupo para iniciar sesión en el tty y configure las variables de entorno correspondientes, incluidas INICIO, RUTA, SHELL, TERM, LOGNAME, etc. Para usuarios normales, RUTA se establece en el valor predeterminado. Para /usr/local/bin:/bin/usr/bin:; para superusuario, RUTA por defecto es /sbin:/bin: /usr/sbin:/usr/bin:

6. Iniciar sesión El último paso del proceso es iniciar un shell para el usuario si el ID de usuario y el ID de grupo se especifican en /etc/passwd. , se configuran el ID de usuario y el ID de grupo, y se configuran las variables de entorno correspondientes si etc/passwd no especifica un shell para el usuario, entonces se usará /bin/sh si el directorio de trabajo actual no está especificado en /. etc/passwd, se utilizará "/".

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

A través del análisis anterior del programa fuente de inicio de sesión, podemos encontrar que si. Si desea realizar un inicio de sesión automático, debe hacer un escándalo en el tercer paso e intentar omitir el proceso de solicitud de contraseña y verificación de contraseña. En realidad, es muy simple verificar si en el programa fuente de inicio de sesión se establece un control de interruptor passwd_req. contraseña El valor predeterminado es 1 (passwd_req = 1), lo que significa que se requiere una contraseña para la verificación. Después de cambiar esta línea de código a (passwd_req = 0), el problema se resuelve.

En otras palabras, simplemente haga las siguientes modificaciones al archivo fuente:

... ...

402 fflag = hflag = pflag = 0 //login.c file No; 402 Línea

403 //passwd_req = 1 // Se requiere autenticación de contraseña de forma predeterminada, comente esta línea

404 passwd_req = 0 // Agregue esta línea

... ...

Después de la modificación, puede utilizar el Makefile proporcionado por util-linux-2.11r-10.src.rpm para volver a compilarlo directamente o compilarlo usted mismo:

gcc -o login login.c setproctitle.c checktty.c xstrncpy.c -Wall -lcrypt Preste atención para incluir la siguiente opción de compilación -lcrypt, de lo contrario habrá problemas.

Utilice la nueva versión de mingetty e inicie sesión, copie mingetty en el directorio /sbin/, copie el inicio de sesión en el directorio /bin, establezca el nivel de inicio en /etc/inittab en 3 y luego reinicie el sistema (los lectores pueden escribir sus propios scripts 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 funcionalidad del código. Lo que hay que tener 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. Al mismo tiempo, también debe preparar un disco de inicio del sistema (también es aceptable un disco de instalación del sistema, para que los lectores tengan la oportunidad de escribir Linux Rescue), especialmente antes de probar una nueva versión del programa si el código cambia ligeramente. inapropiado, el sistema no se iniciará normalmente.

Si no desea probar más el código, simplemente modifíquelo de acuerdo con el método proporcionado en este artículo y no habrá problemas cuando se inicie el sistema.

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

Después de realizar el inicio de sesión automático en el nivel de inicio 3, es muy sencillo ejecutar aplicaciones automáticamente en /etc/rc.d. Simplemente agregue el aplicación al script /rc.local. (Los lectores pueden intentar agregar startx al script para ver cómo funciona. En cierto sentido, agrega otra forma de iniciar sesión automáticamente en la ventana X)

Iniciar sesión automáticamente en la ventana X (al inicio nivel 5) y tres complementos para ejecutar automáticamente aplicaciones específicas

En "Cómo iniciar sesión automáticamente en Linux", la parte de inicio de sesión automático se basa principalmente en el fondo de la plataforma redhat 7.2 y se puede usar directamente en redhat 8.0 sin ninguna modificación.

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

Para iniciar sesión en kde, la interfaz para ejecutar programas automáticamente no ha cambiado.

IV.Conclusión

Este artículo combina el artículo "Cómo iniciar sesión automáticamente en Linux" y básicamente resuelve el problema de cómo iniciar sesión automáticamente en Linux y ejecutar automáticamente la aplicación correspondiente. . Se proporcionan los métodos correspondientes para los dos niveles de inicio más comunes (Nivel 3 y Nivel 5).

En esta etapa, desde la inicialización del sistema hasta mingetty e inicio de sesión, el kernel realmente completó el proceso de inicio y alcanzó la etapa más alta de inicialización del sistema, lo que tiene poco que ver con el kernel. En este punto, /sbin/init principal se inicializará según el contenido de /etc/inittab y la cámara. Para obtener más información, consulte (man 8 init) o ​​(man 5 inittab).

Al realizar modificaciones en los paquetes mencionados en este artículo, cumpla con los estándares de la Licencia pública general de GNU (GPL). Además, reemplazar los nombres de inicio de sesión generalmente se considera piratería y debe realizarse con precaución.

Referencias

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

2.minggetty-1.00-3.src.rpm, incluida en el código fuente de la distribución redhat 8.0;

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

Puedes contactarlo a través de los siguientes métodos