2017-08-25 29 views
0

基本的には、Arduinoを接続してコンピュータと通信しています。目標は、ボタンをクリックしているときにChromiumを開くことです。クリックすると、Arduinoのはserial communication上の文字列を送信し、コンピュータがPythonスクリプトにこの文字列のおかげを取得します。Ubuntu/Python:SubProccess.PopenからChromiumを起動できません

このスクリプトは起動しませんChromiumため除外、私は何の問題もなく、すべてのことを行うことができましたPopen(['chromium-brower'])

を使用してChromiumを起動します。構文は正しいですが、端末は理解できない奇妙なエラーを返します。

#!/usr/bin/env python 

import serial 
from subprocess import Popen 

ser = serial.Serial('/dev/ttyACM0', 9600) 

while 1 : 
    line = ser.readline().strip() 
    print line 
    if line == "start": 
     p = Popen(["chromium-browser"]) 

は、私がPopen(["gedit"])Popen(["firefox"])として、他のアプリで試してみましたし、それがうまく働いた:

sudo python serialtest.py start [0825/084720:ERROR:nss_util.cc(96)] Failed to create /home/dlslabo/.pki/nssdb directory. [0825/084721:FATAL:chrome_main_delegate.cc(386)] Check failed: process_type.empty(). Unable to get the user data directory for process type: zygote #0 0x7f1a233095fe base::debug::StackTrace::StackTrace() #1 0x7f1a23325f8e logging::LogMessage::~LogMessage() #2 0x7f1a2f3a11f5 #3 0x7f1a2aa8f224 #4 0x7f1a2aa8d80d content::ContentMain() #5 0x7f1a2f3a065a #6 0x7f1a17a25a40 __libc_start_main #7 0x7f1a2f3a0519

は、ここに私のpythonプログラムです。 私はインターネット上で読んだから、私は、スーパーユーザーとしてスクリプトを実行していますので、これは可能性があります。しかし、なぜこのことが問題になるのか分かりません。 rootユーザーとしてブラウザ(またはシステム管理のためではない、他のプログラム)を実行する

+0

あなたは、スーパーユーザーとして、それを起動しない場合はどうなりますか? – Kev1n91

答えて

1

は、セキュリティのために悪い考えです。

あなたがrootを使用しているようにあなたは、特定のデバイスノードにアクセスする必要があるために見えます。その場合、非rootユーザーをデバイスの所有者にすることができます。これを行う最も簡単な方法は、udevルールによるものです。より多くのユーザーが彼らのためにグループを作成し、アクセスを必要とする可能性がある場合、

KERNEL=="ttyACM0", OWNER="mynonrootuser", MODE=0660 

ttyacmを言うと、GROUP="ttyacm"MODE=0660を設定します。次の内容の/etc/udev/rules.d/99-tty-acm.rulesという名前のファイルを作成します。 More about writing udev rules here.