Ceci est ma première question ici.
J'utilise Ubuntu 12.04 et j'ai une application accédant au port USB de l'ordinateur. Mon nom d'utilisateur Ubuntu est gadu . Jusqu'à aujourd'hui, j'ai toujours utilisé la commande suivante:
sudo ./gadumaster
et entré mon mot de passe (gadumaster est l'application accédant à l'USB). Cette commande fonctionnait, ainsi qu'un appel à la fonction système reboot () utilisée pour redémarrer mon ordinateur portable lorsque certaines conditions externes de l'USB se produisaient.
Aujourd'hui, j'ai dû changer les choses pour que cette application s'exécute automatiquement après le démarrage de l'ordinateur portable. Par conséquent, j'ai préparé un fichier de script et cherché un moyen de transmettre le mot de passe au script. Après avoir lu quelques articles, j'ai décidé d'autoriser l'accès à l'USB pour mon utilisateur en l'ajoutant au groupe de numérotation :
sudo adduser gadu dialout
Après le redémarrage, j'ai pu démarrer mon application en tapant simplement:
./gadumaster
C'était excellent, mais j'avais besoin d'un moyen pour activer également la fonction reboot () . Quelle a été ma surprise quand j'ai compris que la commande suivante ne fonctionnait plus:
sudo ./gadumaster
Oui, l'exécution de l'application avec sudo me donne l'erreur "Autorisation refusée" lors de la connexion à USB! Notez que sans sudo ça marche!
J'ai essayé de supprimer mon utilisateur du groupe de numérotation:
composition sudo deluser gadu
Après le redémarrage, je me suis retrouvé dans une situation qui, avec sudo et sans commandes sudo, ne fonctionne pas! Même la fonction reboot () ne fonctionne dans aucune des situations.
Quelqu'un pourrait-il décrire ce qui ne va pas avec mon ubuntu? Merci d'avance.
Fichier / 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
Le répertoire /etc/sudoers.d contient un seul fichier README.
L'erreur affichée est:
Échec d'OpenComm (): autorisation refusée.
imprimé via l'extrait de code suivant - partie de l'application gadumaster (voir la fonction 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;
}
REMARQUE: Le mystère est la raison pour laquelle sudo ./gadumaster ne fonctionne plus. Comment se fait-il qu'aucune autorisation ne soit accordée à / dev / ttyUSB0 pour le superutilisateur?
la source
/etc/sudoers
le contenu du fichier, exactement l'erreur que vous avez obtenue et le script gadumaster?ls -l gadumaster
dans le répertoire des fichiers?Réponses:
Comme suggéré par CheddieMerai , l'utilisation
ls -l gadumaster
peut vous indiquer que vous définissez des autorisations de fichier incorrectes. Ce n'est plus un problème avec la connexion USB.Vous pouvez résoudre ce problème en reconstruisant votre application ou en modifiant les autorisations de fichier via
chmod 775 gadumaster
(ou similaire) et / ouchown $USER gadumaster
(vous pouvez remplacer $ USER par l'utilisateur censé "posséder" le fichier).la source