Acesso a / dev / ttyUSB0 e sudo

8

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?

    
por niki kal 07.10.2014 / 21:20

1 resposta

2

Como sugerido por CheddieMerai , usando ls -l gadumaster pode informar que você definiu permissões de arquivo incorretas . Isso não é mais um problema com a conexão USB.

Você pode resolver isso recriando seu aplicativo ou alterando as permissões do arquivo via chmod 775 gadumaster (ou similar) e / ou chown $USER gadumaster (você pode substituir $ USER pelo usuário que deveria "possuir" o arquivo).

    
por ApolloLV 05.11.2014 / 10:56