/ dev / ttyUSB0 및 sudo에 액세스 alias specification # Cmnd

이것이 나의 첫 번째 질문입니다.

Ubuntu 12.04를 실행 중이며 컴퓨터의 USB 포트에 액세스하는 응용 프로그램이 있습니다. 내 우분투 사용자 이름은 gadu 입니다. 오늘까지는 항상 다음 명령을 사용했습니다.

sudo ./gadumaster

내 비밀번호를 입력했습니다 (gadumaster는 USB에 액세스하는 애플리케이션입니다). 이 명령은 USB에서 외부 조건이 발생했을 때 랩톱을 다시 시작하는 데 사용되는 시스템 기능 reboot () 호출뿐만 아니라 작동 했습니다.

오늘은 노트북을 시작한 후이 응용 프로그램이 자동으로 실행되도록 변경해야했습니다. 따라서 스크립트 파일을 준비하고 암호를 스크립트에 전달하는 방법을 검색했습니다. 몇 가지 기사를 읽은 후 다이얼 아웃 그룹 에 추가하여 사용자의 USB 액세스를 허용하기로 결정했습니다 .

sudo adduser gadu 다이얼 아웃

재부팅 한 후 간단히 다음을 입력하여 응용 프로그램을 시작할 수있었습니다.

./gadumaster

이것은 훌륭했지만 reboot () 함수 를 활성화하는 방법이 필요했습니다 . 다음 명령이 더 이상 작동하지 않는다는 것을 알았을 때 놀랐습니다.

sudo ./gadumaster

예, sudo로 응용 프로그램을 실행하면 USB에 연결할 때 “Permission denied”오류가 발생합니다! sudo가 없으면 작동합니다!

전화 걸기 그룹에서 사용자를 제거하려고했습니다.

sudo deluser gadu 다이얼 아웃

재부팅 후 sudosudo 명령이 모두 작동하지 않는 상황에 처 했습니다! reboot () 함수 조차도 어느 상황에서도 작동하지 않습니다.

아무도 내 우분투에 어떤 문제가 있는지 설명 할 수 있습니까? 미리 감사드립니다.

/ 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 파일 만 있습니다.

표시되는 오류는 다음과 같습니다.

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에 권한이 부여되지 않은 것은 무엇입니까?



답변

CheddieMerai 에서 제안한 대로 를 사용 ls -l gadumaster하면 잘못된 파일 권한을 설정했음을 알 수 있습니다. 더 이상 USB 연결에 문제가되지 않습니다.

응용 프로그램을 다시 빌드하거나 chmod 775 gadumaster(또는 유사한) 및 / 또는 chown $USER gadumaster($ USER를 파일을 “소유”하려는 사용자로 바꿀 수 있음 ) 파일 권한을 변경하여이 문제를 해결할 수 있습니다 .