Truy cập vào / dev / ttyUSB0 và sudo


8

Đâ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?


Bạn có thể đăng: /etc/sudoersnộ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?
Lety

2
đầu ra của ls -l gadumasterthư mục tập tin là gì?

1
CheddieMerai, điều này dẫn tôi đến Nghị quyết! thực thi gadumaster được hiển thị trong lệnh ls màu trắng trên nền đỏ. Theo tài liệu, tập tin này là "setuid (u + s)". Sau khi tôi xóa nó và xây dựng lại ứng dụng của mình (tập tin lại được hiển thị màu xanh lục) tôi có thể chạy cả mà không cần sudo . Cảm ơn!
niki kal

1
thử liên kết này
Lety

3
@nikikal nếu bạn đã tìm thấy giải pháp, tôi có thể đề nghị đưa câu hỏi vào câu trả lời và đánh dấu nó là chấp nhận cho bất kỳ ai khác gặp phải câu hỏi không?
Mitch

Câu trả lời:


2

Theo đề xuất của CheddieMerai , việc sử dụng ls -l gadumastercó thể cho bạn biết rằng bạn đặt quyền truy cập tệp không chính xác. Đây không phải là vấn đề với kết nối USB nữa.

Bạn có thể giải quyết vấn đề này bằng cách xây dựng lại ứng dụng của mình hoặc bằng cách thay đổi quyền của tệp thông qua chmod 775 gadumaster(hoặc tương tự) và / hoặc chown $USER gadumaster(bạn có thể thay thế $ USER bằng người dùng được cho là "sở hữu" tệp).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.