Questa è la mia prima domanda qui.
Sto eseguendo Ubuntu 12.04 e un'applicazione ha accesso alla porta USB del computer. Il mio nome utente Ubuntu è gadu . Fino ad oggi, ho sempre usato il seguente comando:
sudo ./gadumaster
e ho inserito la mia password (gadumaster è l'applicazione che accede all'USB). Questo comando funzionava, nonché una chiamata al riavvio della funzione di sistema () utilizzata per riavviare il mio laptop quando si sono verificate determinate condizioni esterne da USB.
Oggi ho dovuto cambiare le cose, quindi questa applicazione si avvia automaticamente dopo l'avvio del laptop. Pertanto ho preparato un file di script e ho cercato un modo per passare la password allo script. Dopo aver letto alcuni articoli ho deciso di consentire l'accesso a USB per il mio utente aggiungendolo al gruppo dialout :
sudo adduser gadu dialout
Dopo il riavvio sono stato in grado di avviare la mia applicazione digitando semplicemente:
./gadumaster
Questo è stato eccellente, ma avevo bisogno di un modo per abilitare anche la funzione reboot () . Qual è stata la mia sorpresa quando ho capito che il seguente comando non funziona più:
sudo ./gadumaster
Sì, l'esecuzione dell'applicazione con sudo mi dà l'errore "Autorizzazione negata" durante la connessione a USB! Nota che senza sudo funziona!
Ho provato a rimuovere il mio utente dal gruppo dialout:
sudo deluser gadu dialout
Dopo il riavvio mi sono trovato in una situazione che non funziona con sudo e senza i comandi sudo ! Anche la funzione reboot () non funziona in nessuna delle due situazioni.
Qualcuno potrebbe descrivere cosa c'è di sbagliato nel mio ubuntu? Grazie mille in anticipo.
/ etc / sudoers file:
#
# 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
La directory /etc/sudoers.d contiene solo un file README.
L'errore mostrato è:
OpenComm () non riuscito: autorizzazione negata.
stampato tramite il seguente frammento di codice - parte dell'app gadumaster (vedi funzione 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: il mistero è perché sudo ./gadumaster non funziona più. Cosa potrebbe essere che nessuna autorizzazione sia concessa a / dev / ttyUSB0 per il superutente?
/etc/sudoers
contenuto del file, esattamente l'errore che hai ricevuto e script gadumaster?