kernel-packages team mailing list archive
-
kernel-packages team
-
Mailing list archive
-
Message #24869
[Bug 1245832] Re: Bluetooth not working 13.10
Would it be possible for you to test the latest upstream kernel? Refer
to https://wiki.ubuntu.com/KernelMainlineBuilds . Please test the latest
v3.12 kernel[0].
If this bug is fixed in the mainline kernel, please add the following
tag 'kernel-fixed-upstream'.
If the mainline kernel does not fix this bug, please add the tag:
'kernel-bug-exists-upstream'.
If you are unable to test the mainline kernel, for example it will not boot, please add the tag: 'kernel-unable-to-test-upstream'.
Once testing of the upstream kernel is complete, please mark this bug as "Confirmed".
Thanks in advance.
[0] http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.12-rc7-saucy/
** Changed in: linux (Ubuntu)
Importance: Undecided => Medium
--
You received this bug notification because you are a member of Kernel
Packages, which is subscribed to linux in Ubuntu.
https://bugs.launchpad.net/bugs/1245832
Title:
Bluetooth not working 13.10
Status in “linux” package in Ubuntu:
Incomplete
Bug description:
Please be patient as I am new to bug reporting and examining the
workings of the system,
Hardware:- Dell Latttitude D610, Mem- 2Gb, Processor- Intel Pentium
(R)M 1.86 Ghz, Graphics- Galium 04 on ATI RV370, 32 Bit
Bug, Unable to effect bluetooth connection. Able to prior to upgrade
to 13.10.
As standard Bluetooth indicator not working on top bar, open "as standard bluetooth" via settings or dash okay, Can pair with external speaker for example but cannot connect, slider in Bluetooth GUI will not slide to give connect staus.
Tried Blueman Device Manager 1.23, can also find and pair but unable to connect to device.
As installed config shown below just incase there is an error ./ect/bluetooth/audio.conf
# Configuration file for the audio service
# This section contains options which are not specific to any
# particular interface
[General]
# Switch to master role for incoming connections (defaults to true)
#Master=true
# If we want to disable support for specific services
# Defaults to supporting all implemented services
#Disable=Gateway,Source,Socket
# SCO routing. Either PCM or HCI (in which case audio is routed to/from ALSA)
# Defaults to HCI
#SCORouting=PCM
# Automatically connect both A2DP and HFP/HSP profiles for incoming
# connections. Some headsets that support both profiles will only connect the
# other one automatically so the default setting of true is usually a good
# idea.
#AutoConnect=true
# Headset interface specific options (i.e. options which affect how the audio
# service interacts with remote headset devices)
[Headset]
# Set to true to support HFP, false means only HSP is supported
# Defaults to true
HFP=true
# Maximum number of connected HSP/HFP devices per adapter. Defaults to 1
MaxConnected=1
# Set to true to enable use of fast connectable mode (faster page scanning)
# for HFP when incoming call starts. Default settings are restored after
# call is answered or rejected. Page scan interval is much shorter and page
# scan type changed to interlaced. Such allows faster connection initiated
# by a headset.
FastConnectable=false
# Just an example of potential config options for the other interfaces
#[A2DP]
#SBCSources=1
#MPEG12Sources=0
A system crash report generated an error in /usr/bin/blueman-assistant
file copy below
#! /usr/bin/python
# Copyright (C) 2008 Valmantas Paliksa <walmis at balticum-tv dot lt>
# Copyright (C) 2008 Tadas Dailyda <tadas at dailyda dot com>
#
# Licensed under the GNU General Public License Version 3
#
# 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.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
PAGE_INTRO = 0
PAGE_DEVLIST = 1
PAGE_PASSKEY = 2
PAGE_PAIRING = 3
PAGE_CONNECT = 4
PAGE_CONNECTING = 5
PAGE_FINISH = 6
pages = {}
import os
import sys
import gtk
import random
import dbus.glib
from optparse import OptionParser
#support running uninstalled
_dirname = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
if os.path.exists(os.path.join(_dirname,"ChangeLog")):
sys.path.insert(0, _dirname)
from blueman.Functions import *
from blueman.gui.DeviceSelectorWidget import DeviceSelectorWidget
from blueman.bluez.Agent import Agent, AgentMethod
from blueman.bluez.Manager import Manager
from blueman.main.FakeDevice import FakeDevice
from blueman.main.Device import Device
from blueman.main.AppletService import AppletService
from blueman.Sdp import *
class Assistant(Agent):
def __init__(self):
Agent.__init__(self, "/")
setup_icon_path()
usage = "Usage: %prog [options]"
parser = OptionParser(usage)
parser.add_option("-d", "--device", dest="device",
action="store", help=_("Start configuration assistant for this device"), metavar="ADDRESS")
(options, args) = parser.parse_args()
check_bluetooth_status(_("Bluetooth needs to be turned on for the Bluetooth assistant to work"), lambda: exit())
self.options = options
self.Device = None
self.Adapter = None
self.PairType = 0
self.Passkey = ""
self.Service = None
self.Builder = gtk.Builder()
self.Builder.set_translation_domain("blueman")
self.Builder.add_from_file(UI_PATH +"/assistant.ui")
self.assistant = self.Builder.get_object("assistant")
self.assistant.set_title(_("Bluetooth Assistant"))
self.applet = AppletService()
self.assistant.connect("prepare", self.on_prepare)
self.assistant.connect("close", self.on_close)
self.assistant.connect("cancel", self.on_close)
pages[PAGE_INTRO] = self.Builder.get_object("l_page0")
self.assistant.set_page_header_image(pages[PAGE_INTRO], get_icon("blueman", 32))
self.assistant.set_page_complete(pages[PAGE_INTRO], True)
pages[PAGE_DEVLIST] = self.Builder.get_object("a_page1")
self.assistant.set_page_header_image(pages[PAGE_DEVLIST], get_icon("blueman", 32))
pages[PAGE_PASSKEY] = self.Builder.get_object("a_page2")
self.assistant.set_page_header_image(pages[PAGE_PASSKEY], get_icon("gtk-dialog-authentication", 32))
pages[PAGE_PAIRING] = self.Builder.get_object("l_page3")
self.assistant.set_page_header_image(pages[PAGE_PAIRING], get_icon("gtk-dialog-authentication", 32))
pages[PAGE_CONNECT] = self.Builder.get_object("a_page4")
self.assistant.set_page_header_image(pages[PAGE_CONNECT], get_icon("gtk-connect", 32))
pages[PAGE_CONNECTING] = self.Builder.get_object("l_page5")
self.assistant.set_page_header_image(pages[PAGE_CONNECTING], get_icon("gtk-connect", 32))
pages[PAGE_FINISH] = self.Builder.get_object("l_page6")
self.assistant.set_page_header_image(pages[PAGE_FINISH], get_icon("gtk-yes", 32))
self.svc_vbox = self.Builder.get_object("svcs")
self.cust_passkey = self.Builder.get_object("e_myp")
self.cust_passkey.props.sensitive = False
self.cust_passkey.connect("changed", self.on_passkey_changed)
self.Builder.get_object("r_dontp").connect("toggled", self.on_pairing_method_changed, 2)
self.Builder.get_object("r_myp").connect("toggled", self.on_pairing_method_changed, 1)
self.Builder.get_object("r_randp").connect("toggled", self.on_pairing_method_changed, 0)
self.dev_widget = DeviceSelectorWidget()
self.dev_widget.List.connect("device-selected", self.on_device_selected)
self.dev_widget.List.connect("row-activated", self.on_row_activated)
self.assistant.set_forward_page_func(self.next_page_fn, None)
pages[PAGE_DEVLIST].add(self.dev_widget)
self.dev_widget.show()
if not self.dev_widget.List.IsValidAdapter():
d = gtk.MessageDialog(type=gtk.MESSAGE_ERROR, )
d.props.text = _("No adapters found")
d.props.icon_name = "blueman"
d.props.title = "Blueman Assistant"
d.add_button(gtk.STOCK_CLOSE, gtk.RESPONSE_CANCEL)
d.run()
exit(1)
self.assistant.show()
if options.device != None:
m = Manager("gobject")
try:
adapter = m.GetAdapter()
except:
print "Error: No Adapters present"
exit(1)
try:
d = adapter.FindDevice(options.device)
self.Device = Device(d)
self.Adapter = adapter
if self.Device.Paired:
self.assistant.set_current_page(PAGE_CONNECT)
else:
self.assistant.set_current_page(PAGE_PASSKEY)
except:
info = {}
info["Address"] = options.device
info["Name"] = info["Address"].replace(":", "-")
info["Alias"] = info["Name"]
info["Fake"] = True
self.Device = FakeDevice(info)
self.Adapter = adapter
self.assistant.set_current_page(PAGE_PASSKEY)
else:
self.dev_widget.List.DiscoverDevices()
gtk.main()
def on_row_activated(self, treeview, path, view_column, *args):
self.assistant.set_current_page(self.next_page_fn(self.assistant.get_current_page(), None))
def next_page_fn(self, page, data):
if page == PAGE_INTRO:
return PAGE_DEVLIST
elif page == PAGE_DEVLIST:
if self.Device:
if self.Device.Fake or not self.Device.Paired:
return PAGE_PASSKEY
else:
return PAGE_CONNECT
else:
return PAGE_PASSKEY
elif page == PAGE_PASSKEY:
if not self.Device.Fake and not self.Device.Paired and self.PairType == 2:
return PAGE_CONNECT
#self.assistant.set_page_complete(pages[PAGE_PASSKEY], True)
return PAGE_PAIRING
elif page == PAGE_PAIRING:
if len(self.Device.Services) == 0:
return PAGE_FINISH
return PAGE_CONNECT
elif page == PAGE_CONNECT:
if self.Service and self.Service[0]:
return PAGE_CONNECTING
else:
return PAGE_FINISH
elif page == PAGE_CONNECTING:
return PAGE_FINISH
elif page == PAGE_FINISH:
return PAGE_FINISH+1
return page
def check_custom_passkey(self):
return len(self.cust_passkey.props.text) != 0
def on_passkey_changed(self, e):
if self.PairType == 1:
if self.check_custom_passkey():
self.Passkey = e.props.text
self.assistant.set_page_complete(pages[PAGE_PASSKEY], True)
else:
self.assistant.set_page_complete(pages[PAGE_PASSKEY], False)
def on_pairing_method_changed(self, radio_button, type):
if radio_button.props.active:
if type == 0:
self.cust_passkey.props.sensitive = False
self.assistant.set_page_complete(pages[PAGE_PASSKEY], True)
elif type == 1:
self.cust_passkey.props.sensitive = True
if not self.check_custom_passkey():
self.assistant.set_page_complete(pages[PAGE_PASSKEY], False)
else:
self.cust_passkey.props.sensitive = False
self.assistant.set_page_complete(pages[PAGE_PASSKEY], True)
self.PairType = type
def on_device_selected(self, list, device, iter):
if not device:
self.assistant.set_page_complete(pages[PAGE_DEVLIST], False)
self.Device = None
self.Adapter = list.Adapter
else:
self.assistant.set_page_complete(pages[PAGE_DEVLIST], True)
self.Device = device
self.Adapter = list.Adapter
@AgentMethod
def RequestPinCode(self, device):
dprint("Agent.RequestPinCode")
return self.Passkey
@AgentMethod
def RequestPasskey(self, device):
dprint("Agent.RequestPasskey")
return self.Passkey
def on_close(self, assistant):
gtk.main_quit()
def on_service_toggled(self, rb, sv_name, *args):
if rb.props.active:
self.Service = (sv_name, args)
self.assistant.set_page_complete(pages[PAGE_CONNECT], True)
def on_prepare(self, assistant, page):
num = assistant.get_current_page()
if num == PAGE_PASSKEY:
self.assistant.set_page_complete(pages[PAGE_PASSKEY], True)
elif num == PAGE_PAIRING:
if self.Device.Fake and self.PairType == 2:
pages[PAGE_PAIRING].set_markup(_("<b>Adding Device...</b>"))
self.assistant.set_page_title(pages[PAGE_PAIRING], _("Adding"))
else:
if self.PairType == 0:
self.Passkey = "%04d" % random.randint(0, 9999)
pages[PAGE_PAIRING].set_markup(_("<b>Pairing in
progress...</b>\n\nEnter passkey <b>%s</b> on the device.") %
self.Passkey)
def ok(dev):
self.Device = Device(dev)
def refresh_cb(*args):
self.assistant.set_current_page(PAGE_CONNECT)
self.applet.RefreshServices(self.Device.GetObjectPath(), reply_handler=refresh_cb, error_handler=refresh_cb)
def err(err):
print err
pages[PAGE_FINISH].set_markup(_("<b>Failed to add device</b>"))
self.assistant.set_page_header_image(pages[PAGE_FINISH], get_icon("gtk-no", 32))
self.assistant.set_current_page(PAGE_FINISH)
if self.PairType != 2:
self.Adapter.CreatePairedDevice(self.Device.Address, self.GetObjectPath(), "", reply_handler=ok, error_handler=err)
else:
self.Adapter.CreateDevice(self.Device.Address, reply_handler=ok, error_handler=err)
elif num == PAGE_CONNECT:
self.svc_vbox.foreach(lambda x, y: self.svc_vbox.remove(x), None)
print self.Device.Services
uuids = self.Device.UUIDs
rbs = []
def get_first_item():
try:
return rbs[0]
except:
return None
for name, service in self.Device.Services.iteritems():
if name == "serial":
for uuid in uuids:
uuid16 = uuid128_to_uuid16(uuid)
if uuid16 == DIALUP_NET_SVCLASS_ID:
rbs.append(gtk.RadioButton(get_first_item(), uuid16_to_name(uuid16)))
rbs[-1].connect("toggled", self.on_service_toggled, name, uuid)
self.svc_vbox.pack_start(rbs[-1], False)
if uuid16 == SERIAL_PORT_SVCLASS_ID:
rbs.append(gtk.RadioButton(get_first_item(), uuid16_to_name(uuid16)))
rbs[-1].connect("toggled", self.on_service_toggled, name, uuid)
self.svc_vbox.pack_start(rbs[-1], False)
elif name == "input":
rbs.append(gtk.RadioButton(get_first_item(), _("Input Service")))
rbs[-1].connect("toggled", self.on_service_toggled, name)
self.svc_vbox.pack_start(rbs[-1], False)
elif name == "network":
for uuid in uuids:
uuid16 = uuid128_to_uuid16(uuid)
if uuid16 == GN_SVCLASS_ID:
rbs.append(gtk.RadioButton(get_first_item(), _("Group Network")))
rbs[-1].connect("toggled", self.on_service_toggled, name, uuid)
self.svc_vbox.pack_start(rbs[-1], False)
if uuid16 == NAP_SVCLASS_ID:
rbs.append(gtk.RadioButton(get_first_item(), _("Network Access Point")))
rbs[-1].connect("toggled", self.on_service_toggled, name, uuid)
self.svc_vbox.pack_start(rbs[-1], False)
elif name == "audiosink":
rbs.append(gtk.RadioButton(get_first_item(), _("A2DP Sink (Send Audio)")))
rbs[-1].connect("toggled", self.on_service_toggled, name)
self.svc_vbox.pack_start(rbs[-1], False)
elif name == "audiosource":
rbs.append(gtk.RadioButton(get_first_item(), _("A2DP Source (Receive Audio)")))
rbs[-1].connect("toggled", self.on_service_toggled, name)
self.svc_vbox.pack_start(rbs[-1], False)
elif name == "headset":
rbs.append(gtk.RadioButton(get_first_item(), _("Headset Service")))
rbs[-1].connect("toggled", self.on_service_toggled, name)
self.svc_vbox.pack_start(rbs[-1], False)
rbs.append(gtk.RadioButton(get_first_item(), _("Don't connect")))
rbs[-1].connect("toggled", self.on_service_toggled, None)
self.svc_vbox.pack_start(rbs[-1], False, False, 8)
self.svc_vbox.show_all()
rbs[0].emit("toggled")
if len(self.svc_vbox.get_children()) == 1:
self.assistant.set_current_page(self.next_page_fn(self.assistant.get_current_page(), None))
elif num == PAGE_CONNECTING:
print "connect"
svc = self.Device.Services[self.Service[0]]
def success(*args):
pages[PAGE_FINISH].set_markup(_("<b>Device added and connected successfuly</b>"))
self.assistant.set_page_complete(pages[PAGE_CONNECTING], True)
self.assistant.set_page_header_image(pages[PAGE_FINISH], get_icon("gtk-yes", 32))
self.assistant.set_current_page(PAGE_FINISH)
def fail(*args):
pages[PAGE_FINISH].set_markup(_("<b>Device added successfuly, but failed to connect</b>"))
self.assistant.set_page_complete(pages[PAGE_CONNECTING], True)
self.assistant.set_page_header_image(pages[PAGE_FINISH], get_icon("gtk-dialog-warning", 32))
self.assistant.set_current_page(PAGE_FINISH)
if self.Service[0] == "network":
uuid = self.Service[1][0]
self.applet.ServiceProxy(svc.GetInterfaceName(), svc.GetObjectPath(), "Connect", [uuid], reply_handler=success, error_handler=fail)
elif self.Service[0] == "serial":
uuid = self.Service[1][0]
self.applet.RfcommConnect(self.Device.GetObjectPath(), uuid, reply_handler=success, error_handler=fail)
else:
self.applet.ServiceProxy(svc.GetInterfaceName(), svc.GetObjectPath(), "Connect", [], reply_handler=success, error_handler=fail)
Assistant()
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1245832/+subscriptions
References