Esta é a minha primeira pergunta aqui.
Estou executando o Ubuntu 12.04 e tenho um aplicativo acessando a porta USB do computador. Meu nome de usuário do Ubuntu é gadu . Até hoje, sempre usei o seguinte comando:
sudo ./gadumaster
e digitei minha senha (o gadumaster é o aplicativo que acessa o USB). Este comando estava funcionando, assim como uma chamada à função do sistema reboot () usada para reiniciar meu laptop quando certas condições externas do USB ocorreram.
Hoje eu tive que mudar as coisas para que este aplicativo seja executado automaticamente depois que o laptop for iniciado. Por isso, preparei um arquivo de script e procurei uma maneira de passar a senha para o script. Depois de ler alguns artigos, decidi permitir o acesso ao USB para o meu usuário, adicionando-o ao grupo dialout :
sudo adduser gadu dialout
Após a reinicialização, consegui iniciar meu aplicativo simplesmente digitando:
./ gadumaster
Isso foi excelente, mas eu precisava de uma maneira de ativar também a função reboot () . Qual foi minha surpresa quando descobri que o seguinte comando não está mais funcionando:
sudo ./gadumaster
Sim, executar o aplicativo com sudo me dá um erro "Permissão negada" ao conectar-se ao USB! Note que sem sudo funciona!
Tentou remover meu usuário do grupo de discagem:
sudo deluser gadu dialout
Após a reinicialização, entrei em situações em que ambos os comandos sudo e sudo não estão funcionando! Mesmo a função reboot () não está funcionando em nenhuma situação.
Alguém poderia descrever o que está errado com o meu Ubuntu?
Muito obrigado antecipadamente.
Arquivo
/ 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
Diretório /etc/sudoers.d contém apenas um arquivo README.
O erro mostrado é:
OpenComm () falhou: Permissão negada.
impresso através do seguinte trecho de código - parte do aplicativo gadumaster (consulte a função 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;
}
NOTA: O mistério é por que o sudo ./gadumaster não está mais funcionando. O que poderia ser que nenhuma permissão é concedida a / dev / ttyUSB0 para superusuário?