Szóval a helyzet az, hogy tényleg a "kábel volt rossz". Pontosabban, az volt a baj, hogy egyenes kábellel kötöttem össze, nem fordítottal. Ma vettem fordított kábelt, és egyből működött a kommunikáció a tv-vel.
Az is igaz, hogy a leírásban tényleg rosszul írtak egy dolgot, és ez tényleg összezavarhatja eleinte az embereket. A leírás szerint a kommunikáció ASCII szerint történik. De később írja, hogy a tv azonosítóját és az adatot már hexaban kell küldeni. Nos ez utóbbi nem igaz, mert azt is ASCII-ben kellett küldeni. Pl az azonosítója a tv-nek 01 (egy hexa bájt) helyett 3031 volt (két hexa bájt), ami ugyebár ASCII-ben a 01-et jelenti.
Szóval ez a része rendben lesz.
Viszont még mindig az a bajom, hogy a portot jelenleg csak sudo-val tudom megnyitni. A programnak meg mindenképpen a sima felhasználóval kell mennie, mert van grafikus felülete is. Tehát nem tudom rootként futtatni.
Szóval írtam egy daemon-t, ami sok egyéb dolog mellett a program elindítására is képes. Ez persze szolgáltatásként fut. Ezt pythonban írtam meg. Kérdésem, hogy hogyan lehetne elindítani ennek segítségével az alkalmazást, hogy meg tudja nyitni a protot?
def run_as(self, parancsArray, wait):
os.environ['DISPLAY'] = ':0'
uid = getpwnam(USER).pw_uid
os.setuid(uid)
proc = subprocess.Popen(parancsArray, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
if wait:
message = ''
while True:
line = str(proc.stdout.readline(), 'utf-8')
if line != '':
#the real code does filtering here
uzenet = line.rstrip()
message += uzenet + '
'
else:
break
print('message: ' + message)
return message
A parancsArray-ban a program elérési útja, és az indítási paraméterei vannak.
Legvégső esetben persze megoldható, hogy ez a daemon is kezelje a tv-t, de jobb szeretném a grafikus felületre bízni.
Tehát mit kellene hozzáfűznöm a python kódhoz, hogy megkapja a program a root jogokat?