Đây là câu hỏi đầu tiên của tôi ở đây.
Tôi đang chạy Ubuntu 12.04 và có một ứng dụng truy cập vào cổng USB của máy tính. Tên người dùng Ubuntu của tôi là gadu . Cho đến hôm nay, tôi vẫn luôn sử dụng lệnh sau:
sudo ./gadumaster
và nhập mật khẩu của tôi (gadumaster là ứng dụng truy cập USB). Lệnh này đã hoạt động, cũng như lệnh gọi chức năng khởi động lại hệ thống () được sử dụng để khởi động lại máy tính xách tay của tôi khi xảy ra tình trạng bên ngoài nhất định từ USB.
Hôm nay tôi đã phải thay đổi mọi thứ để ứng dụng này chạy tự động sau khi máy tính xách tay khởi động. Vì vậy, tôi đã chuẩn bị một tập tin kịch bản và tìm cách chuyển mật khẩu cho tập lệnh. Sau khi đọc vài bài báo tôi đã quyết định để cho phép truy cập vào USB để người dùng của tôi bằng cách thêm vào dialout nhóm:
sudo adduser tiện ích quay số
Sau khi khởi động lại, tôi có thể khởi động ứng dụng của mình bằng cách gõ:
./gadumaster
Điều này thật tuyệt vời, nhưng tôi cần một cách để kích hoạt chức năng khởi động lại () . Điều làm tôi ngạc nhiên khi tôi phát hiện ra rằng lệnh sau không còn hoạt động nữa:
sudo ./gadumaster
Có, việc thực thi ứng dụng bằng sudo sẽ cho tôi lỗi "Quyền bị từ chối" khi kết nối với USB! Lưu ý rằng không có sudo nó hoạt động!
Đã thử xóa người dùng của tôi khỏi nhóm quay số:
sudo deluser gadu dialout
Sau khi khởi động lại, tôi gặp phải tình huống cả hai lệnh sudo và không có sudo đều không hoạt động! Ngay cả chức năng restart () cũng không hoạt động trong cả hai trường hợp.
Bất cứ ai có thể mô tả những gì là sai với Ubuntu của tôi? Cảm ơn nhiều trước.
tập tin / 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
Thư mục /etc/sudoers.d chỉ chứa một tệp README.
Lỗi hiển thị là:
OpenComm () không thành công: Quyền bị từ chối.
được in qua đoạn mã sau - một phần của ứng dụng gadumaster (xem hàm 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;
}
LƯU Ý: Điều bí ẩn là tại sao sudo ./gadumaster không hoạt động nữa. Điều gì có thể là không có sự cho phép nào được cấp cho / dev / ttyUSB0 cho siêu người dùng?
/etc/sudoers
nội dung tập tin, chính xác lỗi bạn gặp phải và tập lệnh gadumaster không?