これが私の最初の質問です。
Ubuntu 12.04を実行していて、コンピュータのUSBポートにアクセスするアプリケーションがあります。私のUbuntuユーザー名はgaduです。今日まで、私は常に次のコマンドを使用しました:
sudo ./gadumaster
パスワードを入力しました(gadumasterはUSBにアクセスするアプリケーションです)。このコマンドは機能しており、システム関数reboot()への呼び出しは、USBから特定の外部条件が発生したときにラップトップを再起動するために使用されました。
今日、ラップトップの起動後にこのアプリケーションが自動的に実行されるように変更する必要がありました。そこでスクリプトファイルを用意し、パスワードをスクリプトに渡す方法を探しました。いくつかの記事を読んだ後、ユーザーにUSBへのアクセスを許可することに決めました。USBをダイヤルアウトグループに追加することです。
sudo adduser gaduダイヤルアウト
再起動後、次のように入力するだけでアプリケーションを起動できました。
./gadumaster
これは優れていましたが、reboot()関数も有効にする方法が必要でした。次のコマンドが機能しないことがわかったときの驚きは何ですか。
sudo ./gadumaster
はい、sudoでアプリケーションを実行すると、USBへの接続時に「アクセスが拒否されました」というエラーが表示されます。sudoがなくても機能することに注意してください!
ユーザーをダイヤルアウトグループから削除しようとしました:
sudo deluser gaduダイヤルアウト
再起動後私は両方のことな状況になったのsudoとせずにsudoコマンドが機能していません!reboot()関数でさえ、どちらの状況でも機能しません。
誰かが私のubuntuの何が問題になっているのか説明できますか?よろしくお願いします。
/ 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
/etc/sudoers.dディレクトリには、READMEファイルが1つだけ含まれています。
表示されるエラーは次のとおりです。
OpenComm()が失敗しました:権限が拒否されました。
次のコードスニペットを介して出力-gadumasterアプリの一部(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;
}
注:sudo ./gadumasterが機能しなくなったのはこの謎のためです。/ dev / ttyUSB0にスーパーユーザーの許可が与えられていないのは何ですか?
/etc/sudoers
か?ファイルの内容、正確にあなたが得たエラーとgadumasterスクリプト?