Comando para cambio de sesión, ¿es posible?

Hola muy buenas, tengo una duda y me gustaría saber si alguien del foro se le ocurre algo.

Tengo un ordenador con archlinux en el salón, el cual tiene instalado tanto gnome como openbox. Normalmente, el ordenador lo inicio con gnome para el día a día pero, cuando voy a jugar, me gusta cambiar de sesión y pasarme a openbox (así usar mejor los recursos, o eso creo).

Mi duda es si existe algún comando que me permita pasar de gnome a openbox sin tener que Cerrar Sesión ---> Volver a iniciarla con openbox. La idea: coger el mando y que, al pulsar un botón, pase de gnome a openbox (el cual inicia automáticamente steam en big picture).

¿Es esto posible?
Hmm... el uso de recursos mira si te es necesario con top mismo, pero si tu escritorio te chupa 300mb o menos de ram y tienes suficiente ram no lo veo necesario (lo que si recomiendo es cerrar navegadores que eso si que chupa ram XD).

Y de ser posible, es posible, es mas, hay una distro con esa particularidad integrada: HYBRYDE FUSION, pero no se como funciona ni la he probado (la estoy descargando para que no se me pase XD).

El comando exacto por desgracia no te lo puedo comentar :/, yo en gnome si hace falta mato el shell y otras apps secundarias pero no lo veo tan necesario y si, juego.
Yo conozco cosas para hacer ello pero seria dejaría abierto gnome usando otra tty de manera gráfica para usar steam y eso no te permitiria ahorrar recursos :/

Si quieres currartelo algo... incluso podría ser mas facil un acceso directo que inicie steam y mate el resto de apps que te chupen CPU y RAM que no te interesen e incluso a modo de evento que luego se vuelvan a ejecutar al cerrar Steam.

Sinceramente, si tienes 4gb de ram o mas, yo pensaría mas en cerrar apps de alto consumo para jugar y poco mas (como te digo, yo solo cierro el navegador).
blackgem escribió:Hmm... el uso de recursos mira si te es necesario con top mismo, pero si tu escritorio te chupa 300mb o menos de ram y tienes suficiente ram no lo veo necesario (lo que si recomiendo es cerrar navegadores que eso si que chupa ram XD).

Y de ser posible, es posible, es mas, hay una distro con esa particularidad integrada: HYBRYDE FUSION, pero no se como funciona ni la he probado (la estoy descargando para que no se me pase XD).

El comando exacto por desgracia no te lo puedo comentar :/, yo en gnome si hace falta mato el shell y otras apps secundarias pero no lo veo tan necesario y si, juego.
Yo conozco cosas para hacer ello pero seria dejaría abierto gnome usando otra tty de manera gráfica para usar steam y eso no te permitiria ahorrar recursos :/

Si quieres currartelo algo... incluso podría ser mas facil un acceso directo que inicie steam y mate el resto de apps que te chupen CPU y RAM que no te interesen e incluso a modo de evento que luego se vuelvan a ejecutar al cerrar Steam.

Sinceramente, si tienes 4gb de ram o mas, yo pensaría mas en cerrar apps de alto consumo para jugar y poco mas (como te digo, yo solo cierro el navegador).


Lo del acceso directo matando procesos puede ser una buena idea (y no tener que ir haciendo el cambio de sesión), aunque creo que uno de los que más ralentiza el sistema es el shell de gnome y no se si podré matarlo tal cual. Lo de hacer que se vuelvan a activar después de cerrar steam no tengo ni idea la verdad, tendré que investigarlo un poco.

Bueno, luego por la noche le meteré mano a esto a ver que consigo y cuento por aquí.
yandrot escribió:
blackgem escribió:Hmm... el uso de recursos mira si te es necesario con top mismo, pero si tu escritorio te chupa 300mb o menos de ram y tienes suficiente ram no lo veo necesario (lo que si recomiendo es cerrar navegadores que eso si que chupa ram XD).

Y de ser posible, es posible, es mas, hay una distro con esa particularidad integrada: HYBRYDE FUSION, pero no se como funciona ni la he probado (la estoy descargando para que no se me pase XD).

El comando exacto por desgracia no te lo puedo comentar :/, yo en gnome si hace falta mato el shell y otras apps secundarias pero no lo veo tan necesario y si, juego.
Yo conozco cosas para hacer ello pero seria dejaría abierto gnome usando otra tty de manera gráfica para usar steam y eso no te permitiria ahorrar recursos :/

Si quieres currartelo algo... incluso podría ser mas facil un acceso directo que inicie steam y mate el resto de apps que te chupen CPU y RAM que no te interesen e incluso a modo de evento que luego se vuelvan a ejecutar al cerrar Steam.

Sinceramente, si tienes 4gb de ram o mas, yo pensaría mas en cerrar apps de alto consumo para jugar y poco mas (como te digo, yo solo cierro el navegador).


Lo del acceso directo matando procesos puede ser una buena idea (y no tener que ir haciendo el cambio de sesión), aunque creo que uno de los que más ralentiza el sistema es el shell de gnome y no se si podré matarlo tal cual. Lo de hacer que se vuelvan a activar después de cerrar steam no tengo ni idea la verdad, tendré que investigarlo un poco.

Bueno, luego por la noche le meteré mano a esto a ver que consigo y cuento por aquí.


Yo uso gnome-shell en versiones maso menos dev... y si, lo mato a veces por extensiones experimentales XD. killall gnome-shell y morira... y se volverá a abrir como si nada XD, a veces no eso si XD. Pero si dejas abierto una terminal para ejecutarlo por si acaso te ira bien ^^.
Efectivamente he usado el killall gnome-shell y no hace nada :-?

He terminado haciéndolo con el número de proceso, pero se vuelve a abrir. Tras volver a matarlo, me dice que ha habido un error y sólo me da la opción de logout.

Además, me he dado cuenta de que uno no cierra steam sino que "vuelve al escritorio". Es decir, poner un evento que vuelva a aplicar gnome-shell tras cerrar steam no valdría (tendría que ser un evento que aplicara gnome-shell cuando se saliera del modo big picture).

¿Alguna idea de como meterle mano a esta idea? Yo sigo investigando...
Hola,

Me viene en mente una idea para lo que quieres hacer. Si utilizas Gnome, supongo que tienes gdm para iniciar sesión. Luego podrias editar ~/.xinitrc para añadir:
exec dbus-launch openbox-session


Luego crear un script que al lanzarlo hace un pkill x, y luego ejecuta startx. Así que al arrancar tu maquina gdm se encarga de abrir Gnome y luego cuando quieres cambiar .. con startx, xinit arranca la sesión con openbox.

El problema viene a que si ejecutas el script desde tu usuario, después de matar las x seguramente se detiene y no arranca con startx ya que has matado también el proprio script.
Para solucionar esto podrías arrancar el script como root, o otro usuario que tenga los permisos de matar las X y arrancar el entorno con tu usuario.

Seria estudiar un poco mas a fondo sudo para averiguar como se podría hacer y luego utilizando un alias, para simplificar las cosas, al escribir un comando en terminal se ejecuta el script y hace el cambio de sesión. (ej.#cambiarSesion #-> y luego hace su magia)

Para complicar mas las cosas, se podría ejecutar un script o alguna utilidad (si exista para tal propósito) al arranque del sistema que al detecta cierta pulsación de teclas, ejecute el script.

Siento ser tan ambiguo, pero esta es la dirección que tomaría yo. El siguiente paso es documentarse sobre como conseguir esto y que utilidades hay para ayudarte.

Otras opciones es buscar un poco por los foros de Arch, hay otros usuarios que se han planteado esto y AQUÍ he encontrado una idea. No se como llevas el ingles, pero básicamente consiste en dejar de utilizar GDM para arrancar sesión. Y crear dos ficheros .xinitrc, uno para cada entorno y luego cuando estas en Gnome ejecutas un comando (alias en terminal), y este ejecuta otra sesión X con openbox y mata la existente con Gnome.
Así no tendrás que ejecutar el script como root u otro usuario, como en mi primer planteamiento.

Así que a leer sobre xinit y ver como se puede hacer. :p

Espero que no te he liado demasiado ya, escribí todo esto sobre la marcha y a estas horas me queda el teclado como almohada.

Un saludo y suerte. ;)
mgbob escribió:
Hola,

Me viene en mente una idea para lo que quieres hacer. Si utilizas Gnome, supongo que tienes gdm para iniciar sesión. Luego podrias editar ~/.xinitrc para añadir:
exec dbus-launch openbox-session


Luego crear un script que al lanzarlo hace un pkill x, y luego ejecuta startx. Así que al arrancar tu maquina gdm se encarga de abrir Gnome y luego cuando quieres cambiar .. con startx, xinit arranca la sesión con openbox.

El problema viene a que si ejecutas el script desde tu usuario, después de matar las x seguramente se detiene y no arranca con startx ya que has matado también el proprio script.
Para solucionar esto podrías arrancar el script como root, o otro usuario que tenga los permisos de matar las X y arrancar el entorno con tu usuario.

Seria estudiar un poco mas a fondo sudo para averiguar como se podría hacer y luego utilizando un alias, para simplificar las cosas, al escribir un comando en terminal se ejecuta el script y hace el cambio de sesión. (ej.#cambiarSesion #-> y luego hace su magia)

Para complicar mas las cosas, se podría ejecutar un script o alguna utilidad (si exista para tal propósito) al arranque del sistema que al detecta cierta pulsación de teclas, ejecute el script.

Siento ser tan ambiguo, pero esta es la dirección que tomaría yo. El siguiente paso es documentarse sobre como conseguir esto y que utilidades hay para ayudarte.

Otras opciones es buscar un poco por los foros de Arch, hay otros usuarios que se han planteado esto y AQUÍ he encontrado una idea. No se como llevas el ingles, pero básicamente consiste en dejar de utilizar GDM para arrancar sesión. Y crear dos ficheros .xinitrc, uno para cada entorno y luego cuando estas en Gnome ejecutas un comando (alias en terminal), y este ejecuta otra sesión X con openbox y mata la existente con Gnome.
Así no tendrás que ejecutar el script como root u otro usuario, como en mi primer planteamiento.

Así que a leer sobre xinit y ver como se puede hacer. :p

Espero que no te he liado demasiado ya, escribí todo esto sobre la marcha y a estas horas me queda el teclado como almohada.

Un saludo y suerte. ;)


Bueno, pues he investigado un poco tu primera idea y he dado con el siguiente programita en c.

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <string.h>
#include <unistd.h>

void print_help(char *prog_name) {
        printf("Usage: %s [-n] DEVNAME COMMAND\n", prog_name);
        printf("Usage: '-n' is an optional argument if you want to push a new line at the end of the text\n");
        printf("Usage: Will require 'sudo' to run if the executable is not setuid root\n");
        exit(1);
}

int main (int argc, char *argv[]) {
    char *cmd, *nl = "\n";
    int i, fd;
    int devno, commandno, newline;
    int mem_len;
    devno = 1; commandno = 2; newline = 0;
    if (argc < 3) {
        print_help(argv[0]);
    }
    if (argc > 3 && argv[1][0] == '-' && argv[1][1] == 'n') {
        devno = 2; commandno = 3; newline=1;
    } else if (argc > 3 && argv[1][0] == '-' && argv[1][1] != 'n') {
        printf("Invalid Option\n");
        print_help(argv[0]);
    }
    fd = open(argv[devno],O_RDWR);
    if(fd == -1) {
        perror("open DEVICE");
        exit(1);
    }
    mem_len = 0;
    for ( i = commandno; i < argc; i++ ) {
        mem_len += strlen(argv[i]) + 2;
        if ( i > commandno ) {
            cmd = (char *)realloc((void *)cmd, mem_len);
        } else { //i == commandno
            cmd = (char *)malloc(mem_len);
        }

        strcat(cmd, argv[i]);
        strcat(cmd, " ");
    }
  if (newline == 0)
        usleep(225000);
    for (i = 0; cmd[i]; i++)
        ioctl (fd, TIOCSTI, cmd+i);
    if (newline == 1)
        ioctl (fd, TIOCSTI, nl);
    close(fd);
    free((void *)cmd);
    exit (0);
}


Esto me permite enviar comandos a un terminal (no estoy seguro de si es el nombre más apropiado) tty. Esto me evitaría el problema de que el script se pare al matar las x, aunque tiene que ejecutarse como superusuario y no me termina de gustar.

En cualquier caso, todavía me queda. Aún no he dado con la tecla del script que tengo que ejecutar y en que tty (ya que, normalmente, no estoy logueado en un tty diferente del 1).

Seguiré informando con mis avances.
6 respuestas