Esta es mi primera pregunta aquí.
Estoy ejecutando Ubuntu 12.04 y tengo una aplicación que accede al puerto USB de la computadora. Mi nombre de usuario de Ubuntu es gadu . Hasta hoy, siempre he usado el siguiente comando:
sudo ./gadumaster
e ingresé mi contraseña (gadumaster es la aplicación que accede al USB). Este comando estaba funcionando, así como una llamada al reinicio de la función del sistema () utilizada para reiniciar mi computadora portátil cuando se produjo cierta condición externa del USB.
Hoy tuve que cambiar las cosas para que esta aplicación se ejecute automáticamente después de que se inicia la computadora portátil. Por lo tanto, preparé un archivo de script y busqué una manera de pasar la contraseña al script. Después de leer algunos artículos, decidí permitir el acceso a USB para mi usuario agregándolo al grupo de marcado :
sudo adduser gadu dialout
Después de reiniciar pude iniciar mi aplicación simplemente escribiendo:
./gadumaster
Esto fue excelente, pero necesitaba una forma de habilitar también la función reboot () . Cuál fue mi sorpresa cuando descubrí que el siguiente comando ya no funciona:
sudo ./gadumaster
Sí, ejecutar la aplicación con sudo me da el error "Permiso denegado" al conectarme a USB. Tenga en cuenta que sin sudo funciona!
Intenté eliminar a mi usuario del grupo de marcado:
sudo deluser gadu dialout
¡Después de reiniciar me metí en una situación en la que tanto con sudo como sin comandos de sudo no funcionan! Incluso la función reboot () no funciona en ninguna de las dos situaciones.
¿Alguien podría describir lo que está mal con mi ubuntu? Muchas gracias de antemano.
Archivo / etc / sudoers :
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
El directorio /etc/sudoers.d contiene solo un archivo README.
El error que se muestra es:
OpenComm () falló: permiso denegado.
impreso a través del siguiente fragmento de código - parte de la aplicación gadumaster (ver función perror ()):
bool SerialComm::OpenComm(const char* pszCommport, int nBaudRate, eParity Parity, eStopbits Stopbits)
{
// pszCcommport: /dev/ttyUSB0
m_fdSerial = open(pszCommport, O_RDWR | O_NOCTTY | O_NDELAY);
if(m_fdSerial < 1)
{
m_fdSerial = 0;
perror("OpenComm() failed: ");
return false;
}
fcntl(m_fdSerial, F_SETFL, 0);
if(nBaudRate == 9600)
nBaudRate = B9600;
else if(nBaudRate == 19200)
nBaudRate = B19200;
else if(nBaudRate == 38400)
nBaudRate = B38400;
else
{
// OpenComm(): Unsupported baudrate!
return false;
}
// setting baud rates and stuff
struct termios options;
tcgetattr(m_fdSerial, &options);
m_OriginalOptions = options;
cfsetispeed(&options, nBaudRate);
cfsetospeed(&options, nBaudRate);
options.c_cflag |= (CLOCAL | CREAD);
// next 4 lines setting 8N2
options.c_cflag &= ~PARENB;
options.c_cflag |= CSTOPB;
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;
// raw input
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
// disable software flow control; disable NL->CR conversion; enable marking of Frame/Parity errors
options.c_iflag &= ~(IXON | IXOFF | IXANY | INLCR | ICRNL | PARMRK);
options.c_oflag &= ~(OPOST | ONLCR);
tcsetattr(m_fdSerial, TCSANOW, &options);
tcsetattr(m_fdSerial, TCSAFLUSH, &options);
//required to make flush work, for some reason
sleep(2);
tcflush(m_fdSerial, TCIOFLUSH);
return true;
}
NOTA: El misterio es por qué sudo ./gadumaster ya no funciona. ¿Qué podría ser que no se otorgue permiso a / dev / ttyUSB0 para superusuario?
fuente
/etc/sudoers
contenido del archivo, exactamente el error que recibió y la secuencia de comandos de gadumaster?ls -l gadumaster
directorio de archivos?Respuestas:
Según lo sugerido por CheddieMerai , el uso
ls -l gadumaster
puede decirle que establece permisos de archivo incorrectos. Esto ya no es un problema con la conexión USB.Puede resolver esto reconstruyendo su aplicación o cambiando los permisos del archivo a través de
chmod 775 gadumaster
(o similar) y / ochown $USER gadumaster
(puede reemplazar $ USER con el usuario que se supone que "posee" el archivo).fuente