File: //proc/self/root/usr/share/apport/package-hooks/source_cheese.py
import os
import subprocess
import apport.packaging
import apport.hookutils
import stat
HOME = os.path.expanduser("~")
def add_info(report, ui):
add_tags = []
response = ui.information("Before continuing, please close Cheese if it is already running!\n\nCheese will now be started in debugging mode.\n\nTry to reproduce the problem you are facing\nand 'Close' Cheese.")
## run cheese in debug mode all the bugs need this!
os.popen("env GST_DEBUG=*cheese*:3 cheese 2>&1 | tee /dev/tty >>~/.cache/CheeseDebug.txt")
report['CheeseDebug.txt'] = ('.cache/CheeseDebug.txt', False)
report['lspci'] = apport.hookutils.command_output(['lspci', '-vvnn'])
report['lsusb'] = apport.hookutils.command_output(['lsusb'])
apport.hookutils.attach_related_packages(report, [
"cheese",
"cheese-common"
])
## Clear the screen to keep things tidy
os.system("clear")
response = ui.choice("How would you describe the problem you are facing?", ["Cheese does not work properly", "The webcam image displayed has problems"], False)
if response == None: ## user cancelled
raise StopIteration
if response[0] == 1: ## the image problems are usually due to bad drivers,so we test direct video input from gstreamer to rule out cheese error
response = ui.information("A video image will now be displayed directly from your webcam.\n\nPlease observe if it has the same image problems\nand 'Close' the window.")
## run gstreamer,will auto detect the src and display the webcam input
os.system("gst-launch-1.0 autovideosrc ! videoconvert ! autovideosink")
response = ui.choice("Did you notice the same image problem in the test video?", ["Yes", "No"], False)
if response == None: ## user cancelled
raise StopIteration
if response[0] == 0: ## the issue is mostly related to bad drivers and not cheese!
add_tags.append('gstreamer-error')
report['SourcePackage'] = 'linux'
if response[0] == 1: ## the video input works fine, cheese is messing up the video!
add_tags.append('gstreamer-ok')
dmi_dir = '/sys/class/dmi/id'
if os.path.isdir(dmi_dir):
for f in os.listdir(dmi_dir):
p = '%s/%s' % (dmi_dir, f)
st = os.stat(p)
## ignore the root-only ones, since they have serial numbers
if not stat.S_ISREG(st.st_mode) or (st.st_mode & 4 == 0):
continue
if f in ('subsystem', 'uevent', 'chassis_asset_tag'):
continue
try:
value = open(p).read().strip()
except (OSError, IOError):
continue
if value:
report['dmi.' + f.replace('_', '.')] = value
## Use the hardware information to create a machine type.
if 'dmi.sys.vendor' in report and 'dmi.product.name' in report:
report['MachineType'] = '%s %s' % (report['dmi.sys.vendor'],
report['dmi.product.name'])
apport.hookutils.attach_file(report, '/proc/cpuinfo', 'ProcCpuinfo')
if add_tags:
if 'Tags' in report:
report['Tags'] += ' ' + ' '.join(add_tags)
else:
report['Tags'] = ' '.join(add_tags)