/bin/bash actuando como user

Al instalar el acpi de mi asus eee vienen unos Scripts en bash (/bin/bash). Con estos Scripts ciertas teclas especiales del teclado hacen algunos usos, estilo abrir el navegador o asi. Pero el problema me viene aqui, estos escripts se supone que los executa el root y por lo tanto los programas se abren como si fueras el root (PELIGRO) y no mola nada.

Alguien sabe la manera de que yo pudiera poner comandos y se abrieran como el user que esta en esos momentos ?
Puedes ejecutarlos con "sudo -u elusuarioquesea /bla/bin/bleblilu"

XD

Por otra parte, para que el usuario sea el que este en el momento, imagino que tendras definido $USER, compruebalo con "echo $USER"y si es asi, usa eso xD
El truco del sudo funciona solo con el gnome-terminal :-? y aunque es usuario es el mio, me sale bash al principio y todo en ingles.
El firefox si pongo un sudo ni se abre. . . Sin el sudo se abre tambien en ingles y reclamando porque no es el navegador principal.

Os pongo los codigos (que estavan en bash, perdon --U) :

El comando que se ejecuta al tocar los botones. El boton que es se pone como argumento ( $1) :
#!/bin/bash
#hotkey ATKD

source /etc/acpi/eee.conf
source /etc/acpi/eee/user && x_user_func

case $1 in
        blank) #Blanking button
                $BUTTON_BLANK &
        ;;
        res) #Resolution button
                $BUTTON_RESOLUTION &
        ;;
        user1) #User button 1
                sudo -u $user gnome-terminal
                BUTTON_USER1 &
        ;;
        user2) #User button 2
                sudo -u $user firefox
                sudo -u $user $BUTTON_USER2 &
        ;;
esac

exit 0


El /etc/acpi/eee/user :
x_user_func () {

    if [ -S /tmp/.X11-unix/X0 ]; then
         export DISPLAY=:0
         user=$(who | grep "vc/$X_CONSOLE_NUMBER" | awk  '{ if ($(NF) == "(:0)") print $1 }')
         if [ "$user" = "" ];
         then
                 logger "Could not verify user for X:"
                 logger $(who)
                 logger "Falling back to XUSER: $XUSER"
               user="$XUSER"
         else
               logger "Found X session user: $user"
         fi
         XAUTHORITY=/home/$user/.Xauthority
         [ -f $XAUTHORITY ] && export XAUTHORITY
    else
         logger "X not probably running, lets launch the command anyway"
       user="$XUSER"
    fi;
}


Sin el source del user, no arranca nada que sea grafico.
La variable $USER es $USER, no $user XD

En cualquier caso, por que no le pones un "echo $USER" de comprobacion al script, para ver que realmente la varible apunta a tu usuario?

A unas malas, pon el usuario a mano, si seras siempre tu, no? xD


Edit: ahora que lo miro mejor, veo que en el propio script asigna algo a $user con minusculas... pero sigue siendo algo aparte de lo que yo decia xD
Tambien es cierto que igual en Arch no se define la variable $USER
Lo dicho, a unas malas la defines tu a mano, y usas esa XD
¿Y si le das permisos de ejecución a todos los usuarios? # chmod o+x /usr/bin/nombre_del_script

Salu2.
JanKusanagi escribió:La variable $USER es $USER, no $user XD

En cualquier caso, por que no le pones un "echo $USER" de comprobacion al script, para ver que realmente la varible apunta a tu usuario?

A unas malas, pon el usuario a mano, si seras siempre tu, no? xD


Edit: ahora que lo miro mejor, veo que en el propio script asigna algo a $user con minusculas... pero sigue siendo algo aparte de lo que yo decia xD
Tambien es cierto que igual en Arch no se define la variable $USER
Lo dicho, a unas malas la defines tu a mano, y usas esa XD
Tanto $user como $USER acaban apuntando a mi usuario, prove los dos pero nada.

Todos los user pueden ejecutarlo, que no modificarlo. No acabo de ver el error ù.uU
Si no te ejecuta los programas que requieren de X es porque no encuentra el display, puedes indicarsela en la linea de comandos:
su -l $user -c "DISPLAY=:0 firefox"

ya sea alli o declarandola al inicio del script
codestation escribió:Si no te ejecuta los programas que requieren de X es porque no encuentra el display, puedes indicarsela en la linea de comandos:
su -l $user -c "DISPLAY=:0 firefox"

ya sea alli o declarandola al inicio del script
Con esto funciona muchísimo mejor, gracias.

Lo unico que tiene ahora es el gnome-terminal, que se abre en ingles. Un problema menor sin duda.
7 respuestas