export
не будет иметь никакого эффекта, поскольку каждая команда оценивается в отдельной оболочке, если требуется оболочка, в противном случае будут задействованы только fork и exec. Передайте переменные окружения через аргумент словаря.
Связь будет ждать, пока программа не выйдет. Кроме того, &
не имеет смысла, так как Попен не ждет завершения программы, и нет никакого смысла в фоновом режиме задания, которое не является оболочкой, и не имеет понятия или статуса такого различия.
subprocess.Popen(['pkill', 'X'])
time.sleep(5)
subprocess.Popen(['X', '-retro'])
import sys
env = dict(sys.environ)
env['DISPLAY']=':0'
subprocess.Popen(['openbox', '--replace'], env=env)
Если есть проблема с этим, то это связано с задействованными командами, а не с кодом Python.