Dies ist meine erste Frage hier.
Ich verwende Ubuntu 12.04 und habe eine Anwendung, die auf den USB-Anschluss des Computers zugreift. Mein Ubuntu-Benutzername ist gadu . Bis heute habe ich immer den folgenden Befehl verwendet:
sudo ./gadumaster
und mein Passwort eingegeben (Gadumaster ist die Anwendung, die auf den USB zugreift). Dieser Befehl funktionierte ebenso wie ein Aufruf der Systemfunktion reboot () , mit dem mein Laptop neu gestartet wurde, wenn ein bestimmter externer Zustand von USB auftrat.
Heute musste ich etwas ändern, damit diese Anwendung nach dem Start des Laptops automatisch ausgeführt wird. Deshalb habe ich eine Skriptdatei vorbereitet und nach einer Möglichkeit gesucht, das Passwort an das Skript zu übergeben. Nachdem ich einige Artikel gelesen hatte, entschied ich mich, meinem Benutzer den Zugriff auf USB zu erlauben, indem ich ihn der Dialout- Gruppe hinzufügte :
sudo adduser gadu dialout
Nach dem Neustart konnte ich meine Anwendung durch einfaches Eingeben starten:
./gadumaster
Das war ausgezeichnet, aber ich brauchte eine Möglichkeit, um auch die Funktion reboot () zu aktivieren . Was war meine Überraschung, als ich herausfand, dass der folgende Befehl nicht mehr funktioniert:
sudo ./gadumaster
Ja, wenn ich die Anwendung mit sudo ausführe, wird beim Anschließen an USB der Fehler "Berechtigung verweigert" angezeigt! Beachten Sie, dass es ohne Sudo funktioniert!
Es wurde versucht, meinen Benutzer aus der Einwahlgruppe zu entfernen:
Sudo Deluser Gadu Dialout
Nach dem Neustart kam ich in die Situation, dass sowohl mit sudo als auch ohne sudo Befehle nicht funktionieren! Selbst die Funktion reboot () funktioniert in keiner Situation.
Könnte jemand beschreiben, was mit meinem Ubuntu nicht stimmt? Vielen Dank im Voraus.
/ etc / sudoers Datei:
#
# 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
Das Verzeichnis /etc/sudoers.d enthält nur eine README-Datei.
Der angezeigte Fehler ist:
OpenComm () fehlgeschlagen: Berechtigung verweigert.
Gedruckt über folgendes Code-Snippet - Teil der Gadumaster-App (siehe Funktion 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;
}
HINWEIS: Das Rätsel ist, warum sudo ./gadumaster nicht mehr funktioniert. Was könnte sein, dass / dev / ttyUSB0 keine Berechtigung für den Superuser erteilt wird?
quelle
/etc/sudoers
Folgendes posten: Dateiinhalt, genau den Fehler, den Sie erhalten haben, und Gadumaster-Skript?ls -l gadumaster
im Dateiverzeichnis?Antworten:
Wie von CheddieMerai vorgeschlagen ,
ls -l gadumaster
kann die Verwendung von Ihnen möglicherweise anzeigen , dass Sie falsche Dateiberechtigungen festgelegt haben. Dies ist kein Problem mehr mit der USB-Verbindung.Sie können dies beheben, indem Sie Ihre Anwendung neu erstellen oder die Dateiberechtigungen über
chmod 775 gadumaster
(oder ähnliches) und / oder ändernchown $USER gadumaster
(Sie können $ USER durch den Benutzer ersetzen, der die Datei "besitzen" soll).quelle