이것이 나의 첫 번째 질문입니다.
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 다이얼 아웃
재부팅 후 sudo 와 sudo 명령이 모두 작동하지 않는 상황에 처 했습니다! 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를 파일을 “소유”하려는 사용자로 바꿀 수 있음 ) 파일 권한을 변경하여이 문제를 해결할 수 있습니다 .