访问/ dev / ttyUSB0和sudo


8

这是我的第一个问题。

我正在运行Ubuntu 12.04,并且有一个应用程序在访问计算机的USB端口。我的Ubuntu用户名是gadu。直到今天,我一直使用以下命令:

sudo ./gadumaster

并输入了我的密码(gadumaster是访问USB的应用程序)。该命令正在运行,并且调用了系统功能reboot(),当USB出现某些外部情况时,该函数用于重新启动笔记本电脑。

今天,我不得不进行更改,以便此应用程序在笔记本电脑启动后自动运行。因此,我准备了一个脚本文件,并搜索了一种将密码传递给脚本的方法。看了几篇文章后,我决定通过将其添加到拨出组来允许用户访问USB :

sudo adduser gadu拨出

重新启动后,我只需输入以下内容即可启动我的应用程序:

./gadumaster

这非常好,但是我需要一种方法也可以启用reboot()函数。当我发现以下命令不再起作用时,我感到惊讶的是:

须藤./gadumaster

是的,使用sudo执行应用程序时,连接到USB时出现错误“权限被拒绝”!请注意,如果没有sudo,它将起作用!

试图从拨出组中删除我的用户:

sudo deluser gadu拨出

重新启动后,我发现使用sudo和不使用sudo命令都无法正常工作!甚至reboot()函数在两种情况下都不起作用。

谁能形容我的ubuntu有什么问题?在此先感谢。

/ 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许可是什么?


您能否发布:/etc/sudoers文件内容,确切的错误以及gadumaster脚本?
Lety 2014年

2
ls -l gadumaster文件目录的输出是什么?

1
CheddieMerai,这使我想到了解决方案!gadumaster可执行文件以ls命令显示为白色,红色背景。根据文档,此文件为“ setuid(u + s)”。在删除它并再次构建我的应用程序之后(文件再次以绿色显示),我可以在有和没有sudo的情况下运行它。谢谢!
niki kal 2014年

1
试试这个链接
Lety

3
@nikikal(如果您已找到解决方案)对于遇到该问题的其他任何人,我是否建议将问题放入答案中并将其标记为已接受?
米奇2014年

Answers:


2

CheddieMerai所建议,使用ls -l gadumaster可能会告诉您设置了错误的文件权限。USB连接不再是问题。

您可以通过重建应用程序或通过chmod 775 gadumaster(或类似方法)和/或更改文件权限来解决此问题chown $USER gadumaster(可以将$ USER替换为应该“拥有”文件的用户)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.