2017-01-02 69 views
-1

我想要使用Openbox文件/etc/X11/openbox/autostart自动启动一些PyQt程序。该Openbox的自动启动成功发射下面的示例程序:为什么Openbox自动启动不启动某些程序?

/usr/bin/python /usr/share/test/test.py 

然而,自动启动不启动更复杂的程序(即:

import sys 
from PyQt4.QtGui import * 
application = QApplication(sys.argv) 
button = QPushButton("hello world", None) 
button.show() 
application.exec_() 

这是使用自动启动文件,下面的命令启动在这篇文章的末尾列出,取自here)。我已经确认,使用用户帐号和root用户帐号都可以成功启动这个更复杂的程序,因此我不清楚为什么它不会使用Openbox自动启动。

它在外壳使用以下命令启动:

/usr/bin/python /usr/share/test/ucom-panel.py 

怎么可以这样更复杂的程序由Openbox的推出?

#!/usr/bin/env python 

""" 
################################################################################ 
#                    # 
# UCOM-panel                 # 
#                    # 
################################################################################ 
#                    # 
# LICENCE INFORMATION               # 
#                    # 
# This program is a desktop environment panel.         # 
#                    # 
# copyright (C) 2016 William Breaden Madden         # 
#                    # 
# This software is released under the terms of the GNU General Public License # 
# version 3 (GPLv3).               # 
#                    # 
# This program is free software: you can redistribute it and/or modify it  # 
# under the terms of the GNU General Public License as published by the Free # 
# Software Foundation, either version 3 of the License, or (at your option) # 
# any later version.               # 
#                    # 
# This program is distributed in the hope that it will be useful, but WITHOUT # 
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or  # 
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for  # 
# more details.                # 
#                    # 
# For a copy of the GNU General Public License, see       # 
# <http://www.gnu.org/licenses/>.            # 
#                    # 
################################################################################ 

Usage: 
    program [options] 

Options: 
    -h, --help    display help message 
    --version    display version and exit 
    -v, --verbose   verbose logging 
    -s, --silent    silent 
    -u, --username=USERNAME username 
    --foregroundcolor=COLOR foreground color   [default: ffffff] 
    --backgroundcolor=COLOR background color   [default: 3861aa] 
    --paneltext=TEXT   panel text    [default: UCOM] 
    --windowframe=BOOL  include window frame  [default: false] 
    --alwaysontop=BOOL  set always on top  [default: true] 
    --setposition=BOOL  set launcher position [default: true] 
    --screennumber=NUMBER set launch screen number [default: -1] 
""" 

name = "UCOM-panel" 
version = "2016-12-23T0400Z" 
logo = None 

import docopt 
import logging 
import os 
import propyte 
from PyQt4 import QtGui, QtCore 
import subprocess 
import shijian 
import sys 
import threading 
import time 

def main(options): 

    global program 
    program = propyte.Program(
     options = options, 
     name = name, 
     version = version, 
     logo = logo 
    ) 
    global log 
    from propyte import log 

    program.color_1   = options["--foregroundcolor"] 
    program.color_2   = options["--backgroundcolor"] 
    program.panel_text  = options["--paneltext"] 
    program.window_frame  = options["--windowframe"].lower() == "true" 
    program.set_always_on_top = options["--alwaysontop"].lower() == "true" 
    program.set_position  = options["--setposition"].lower() == "true" 
    program.screen_number  = int(options["--screennumber"]) 

    application = QtGui.QApplication(sys.argv) 
    panel = Panel() 
    panel.move(
     application.desktop().screenGeometry(program.screen_number).left(), 
     application.desktop().screenGeometry(program.screen_number).top() 
    ) 
    sys.exit(application.exec_()) 

class Panel(QtGui.QWidget): 

    def __init__(
     self, 
     ): 
     super(Panel, self).__init__() 

     self.text_panel = QtGui.QLabel(program.panel_text) 

     self.indicator_percentage_power = QtGui.QLabel(self) 

     self.indicator_clock = QtGui.QLabel(self) 

     self.menu = QtGui.QMenu(self) 
     self.menu.addAction("Openbox Configuration Manager") 
     self.menu.addAction("unity-control-center") 
     self.menu.addAction("close panel") 
     self.menu.addAction("suspend") 
     self.menu.addAction("hibernate") 
     self.menu.addAction("reboot") 
     self.menu.addAction("shut down") 
     self.menu.triggered[QtGui.QAction].connect(self.process_menu) 

     self.button_menu = QtGui.QPushButton("settings") 
     self.button_menu.setMenu(self.menu) 

     hbox = QtGui.QHBoxLayout() 
     if program.panel_text != "": 
      hbox.addWidget(self.text_panel) 
     hbox.addStretch(1) 
     hbox.addWidget(self.indicator_percentage_power) 
     hbox.addSpacing(30) 
     hbox.addWidget(self.indicator_clock) 
     hbox.addSpacing(30) 
     hbox.addWidget(self.button_menu) 
     self.setLayout(hbox) 

     self.setStyleSheet(
      """ 
      color: #{color_1}; 
      background-color: #{color_2} 
      """.format(
       color_1 = program.color_1, 
       color_2 = program.color_2 
      ) 
     ) 

     self.text_panel.setStyleSheet(
      """ 
      QLabel{{ 
       color: #{color_1}; 
       background-color: #{color_2}; 
       /* 
       border: 1px solid #{color_1}; 
       */ 
      }} 
      """.format(
       color_1 = program.color_1, 
       color_2 = program.color_2 
      ) 
     ) 

     self.indicator_percentage_power.setStyleSheet(
      """ 
      QLabel{{ 
       color: #{color_1}; 
       background-color: #{color_2}; 
       /* 
       border: 1px solid #{color_1}; 
       */ 
      }} 
      """.format(
       color_1 = program.color_1, 
       color_2 = program.color_2 
      ) 
     ) 

     self.indicator_clock.setStyleSheet(
      """ 
      QLabel{{ 
       color: #{color_1}; 
       background-color: #{color_2}; 
       /* 
       border: 1px solid #{color_1}; 
       */ 
      }} 
      """.format(
       color_1 = program.color_1, 
       color_2 = program.color_2 
      ) 
     ) 

     self.menu.setStyleSheet(
      """ 
      QMenu{{ 
       color: #{color_1}; 
       background-color: #{color_2}; 
       /* 
       border: 1px solid #{color_1}; 
       */ 
      }} 
      QMenu::item{{ 
       color: #{color_1}; 
       background-color: #{color_2}; 
       /* 
       border: 1px solid #{color_1}; 
       */ 
      }} 
      QMenu::item::selected{{ 
       color: #{color_2}; 
       background-color: #{color_1}; 
       /* 
       border: 1px solid #{color_1}; 
       */ 
      }} 
      """.format(
       color_1 = program.color_1, 
       color_2 = program.color_2 
      ) 
     ) 

     self.button_menu.setStyleSheet(
      """ 
      QPushButton{{ 
       color: #{color_1}; 
       background-color: #{color_2}; 
       border: none; 
       margin: 0px; 
       padding: 0px; 
      }} 
      QPushButton:pressed{{ 
       color: #{color_1}; 
       background-color: #{color_2}; 
       border: none; 
       margin: 0px; 
       padding: 0px; 
      }} 
      """.format(
       color_1 = program.color_1, 
       color_2 = program.color_2 
      ) 
     ) 

     if program.set_always_on_top is True: 
      self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint) 
     if program.window_frame is False: 
      self.setWindowFlags(QtCore.Qt.FramelessWindowHint) 
     if program.set_position is True: 
      self.move(0, 0) 
     self.resize(QtGui.QDesktopWidget().screenGeometry().width(), 15) 

     thread_percentage_power = threading.Thread(
      target = self.percentage_power 
     ) 
     thread_percentage_power.daemon = True 
     thread_percentage_power.start() 

     thread_clock = threading.Thread(
      target = self.clock 
     ) 
     thread_clock.daemon = True 
     thread_clock.start() 

     self.show() 

    def process_menu(
     self, 
     action 
     ): 
     action_text = action.text() 
     if action_text == "Openbox Configuration Manager": 
      shijian.engage_command("obconf") 
     if action_text == "unity-control-center": 
      shijian.engage_command("unity-control-center") 
     if action_text == "close panel": 
      program.terminate() 
     if action_text == "suspend": 
      shijian.engage_command("systemctl suspend") 
     if action_text == "hibernate": 
      shijian.engage_command("systemctl hibernate") 
     if action_text == "reboot": 
      shijian.engage_command("systemctl reboot") 
     if action_text == "shut down": 
      shijian.engage_command("systemctl poweroff") 

    def percentage_power(
     self 
     ): 
     while True: 
      percentage_power = shijian.percentage_power() 
      if percentage_power is None: 
       percentage_power = "100%" 
      self.indicator_percentage_power.setText(
       percentage_power 
      ) 
      time.sleep(30) 

    def clock(
     self 
     ): 
     while True: 
      self.indicator_clock.setText(
       shijian.time_UTC(
        style = "YYYY-MM-DD HH:MM:SS UTC" 
       ) 
      ) 
      time.sleep(1) 

if __name__ == "__main__": 
    options = docopt.docopt(__doc__) 
    if options["--version"]: 
     print(programVersion) 
     exit() 
    main(options) 
+2

很抱歉,如果我误解但到底是什么节目的内容都与能够启动它,因为这似乎并没有被有关命令行参数,它是关于运行它所需的命令。无论您从shell终端使用哪种命令,这都是您在启动脚本中使用的。 – Schollii

+0

@Schollii嘿,那里。我将在shell中用来启动更复杂的程序的命令工作正常。当我将这个命令放入自动启动时,程序似乎不会启动。 – d3pd

+0

请确认当您将openbox自动启动放入的shell命令复制到shell窗口时,它可以正常工作。 – Schollii

回答

1

没有OPENBOX的日志输出,其中将显示脚本运行时发生了什么,这是不可能的,你可以得到一个答案。这可能是一个路径问题,一个lib路径问题,权限问题,安全级别问题等

这里有一些事情要尝试:

  • 查找OPENBOX日志的输出;你可能必须激活它。
  • 可能还有openbox的测试模式,您可以在shell窗口中通过命令行调用openbox;那么你可以看到你是否有任何控制台输出。
  • 登录你的命令的输出到一个文件,并检查它是什么后OPENBOX自动启动已运行:

    your_command >$HOME/openbox_log 2>&1 & 
    
  • 把你的命令脚本,并呼吁从自动启动的,而不是用命令ARGS运行蟒(这是一个长镜头,但值得一试)

相关问题