Eu sei como conectar o fone de ouvido bluetooth ao Ubuntu, então posso, por exemplo falar com o Skype remotamente.
Agora eu tenho a pergunta oposta: como transformar o Ubuntu em um headset sofisticado, que pode gravar fluxos de som de entrada e saída? Tenho falta de capacidades de gravação de som decente no meu telefone (Nokia 6310i) e espero que eu possa ajudar um pouco com o meu Notebook.
A ativação do A2DP sink e source não é suficiente para o meu Notebook ficar visível como um fone de ouvido remoto no telefone. Eu acho que eu preciso ativar algum outro protocolo bluetooth extra ( como perfil HFP ).
Eu descobri um utilitário [nohands][3]
que promete fazer exatamente isso, mas ele não se baseia no Ubuntu 14.04 e parece abandonado por 4 anos.
Depois de satisfazer as dependências (pelo menos de acordo com o ./configure
), ele falha na construção:
[adam:/home/Adama-docs/Adam/Adam/linux/tmp/nohands]$ make
make all-recursive
make[1]: Entering directory '/home/Adama-docs/Adam/Adam/linux/tmp/nohands'
Making all in libhfp
make[2]: Entering directory '/home/Adama-docs/Adam/Adam/linux/tmp/nohands/libhfp'
g++ -DHAVE_CONFIG_H -I. -I.. -I../include -include config.h -Wshadow -fno-exceptions -g -Wall -MT bt.o -MD -MP -MF .deps/bt.Tpo -c -o bt.o bt.cpp
In file included from bt.cpp:48:0:
../include/libhfp/bt.h: In member function ‘void libhfp::BtDevice::DisconnectAll()’:
../include/libhfp/bt.h:1081:50: warning: converting ‘false’ to pointer type for argument 1 of ‘void libhfp::BtDevice::__DisconnectAll(libhfp::ErrorInfo*)’ [-Wconversion-null]
void DisconnectAll(void) { __DisconnectAll(false); }
^
In file included from bt.cpp:42:0:
bt.cpp: In static member function ‘static int libhfp::SdpAsyncTaskHandler::SdpLookupChannel(libhfp::SdpTaskParams&)’:
bt.cpp:81:20: error: taking address of temporary [-fpermissive]
sdp = sdp_connect(BDADDR_ANY, &htp.m_bdaddr, SDP_RETRY_IF_BUSY);
^
bt.cpp: In member function ‘bool libhfp::BtHub::Start(libhfp::ErrorInfo*)’:
bt.cpp:1226:22: error: taking address of temporary [-fpermissive]
m_sdp = sdp_connect(BDADDR_ANY, BDADDR_LOCAL, SDP_RETRY_IF_BUSY);
^
bt.cpp:1226:34: error: taking address of temporary [-fpermissive]
m_sdp = sdp_connect(BDADDR_ANY, BDADDR_LOCAL, SDP_RETRY_IF_BUSY);
^
In file included from ../include/libhfp/bt.h:31:0,
from bt.cpp:48:
../include/libhfp/events.h: In instantiation of ‘void libhfp::Callback<void, TA1>::operator()(TA1) [with TA1 = libhfp::SdpTask*]’:
bt.cpp:219:25: required from here
../include/libhfp/events.h:816:13: error: ‘Invoke’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
Invoke(ia);
^
../include/libhfp/events.h:816:13: note: declarations in dependent base ‘libhfp::CallbackAdapter<void, libhfp::ArgSet<libhfp::SdpTask*, libhfp::Nil, libhfp::Nil, libhfp::Nil, libhfp::Nil, libhfp::Nil> >’ are not found by unqualified lookup
../include/libhfp/events.h:816:13: note: use ‘this->Invoke’ instead
../include/libhfp/events.h: In instantiation of ‘void libhfp::Callback<void, TA1, TA2>::Register(TargT*, void (TargT::*)(TA1, TA2)) [with TargT = libhfp::SdpAsyncTaskHandler; TA1 = libhfp::SocketNotifier*; TA2 = int]’:
bt.cpp:349:27: required from here
../include/libhfp/events.h:853:28: error: ‘RegisterDirect’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
RegisterDirect(targp, mfp);
^
../include/libhfp/events.h:853:28: note: declarations in dependent base ‘libhfp::CallbackAdapter<void, libhfp::ArgSet<libhfp::SocketNotifier*, int, libhfp::Nil, libhfp::Nil, libhfp::Nil, libhfp::Nil> >’ are not found by unqualified lookup
../include/libhfp/events.h:853:28: note: use ‘this->RegisterDirect’ instead
../include/libhfp/events.h: In instantiation of ‘void libhfp::Callback<void, TA1>::operator()(TA1) [with TA1 = libhfp::HciTask*]’:
bt.cpp:687:25: required from here
../include/libhfp/events.h:816:13: error: ‘Invoke’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
Invoke(ia);
^
../include/libhfp/events.h:816:13: note: declarations in dependent base ‘libhfp::CallbackAdapter<void, libhfp::ArgSet<libhfp::HciTask*, libhfp::Nil, libhfp::Nil, libhfp::Nil, libhfp::Nil, libhfp::Nil> >’ are not found by unqualified lookup
../include/libhfp/events.h:816:13: note: use ‘this->Invoke’ instead
../include/libhfp/events.h: In instantiation of ‘void libhfp::Callback<void, TA1>::Register(TargT*, void (TargT::*)(TA1)) [with TargT = libhfp::BtHci; TA1 = libhfp::TimerNotifier*]’:
bt.cpp:894:48: required from here
../include/libhfp/events.h:810:28: error: ‘RegisterDirect’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
RegisterDirect(targp, mfp);
^
../include/libhfp/events.h:810:28: note: declarations in dependent base ‘libhfp::CallbackAdapter<void, libhfp::ArgSet<libhfp::TimerNotifier*, libhfp::Nil, libhfp::Nil, libhfp::Nil, libhfp::Nil, libhfp::Nil> >’ are not found by unqualified lookup
../include/libhfp/events.h:810:28: note: use ‘this->RegisterDirect’ instead
../include/libhfp/events.h: In instantiation of ‘void libhfp::Callback<void, TA1, TA2>::Register(TargT*, void (TargT::*)(TA1, TA2)) [with TargT = libhfp::BtHci; TA1 = libhfp::SocketNotifier*; TA2 = int]’:
bt.cpp:895:51: required from here
../include/libhfp/events.h:853:28: error: ‘RegisterDirect’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
RegisterDirect(targp, mfp);
^
../include/libhfp/events.h:853:28: note: declarations in dependent base ‘libhfp::CallbackAdapter<void, libhfp::ArgSet<libhfp::SocketNotifier*, int, libhfp::Nil, libhfp::Nil, libhfp::Nil, libhfp::Nil> >’ are not found by unqualified lookup
../include/libhfp/events.h:853:28: note: use ‘this->RegisterDirect’ instead
../include/libhfp/events.h: In instantiation of ‘void libhfp::Callback<void, TA1>::Register(TargT*, void (TargT::*)(TA1)) [with TargT = libhfp::BtHub; TA1 = libhfp::TimerNotifier*]’:
bt.cpp:1142:41: required from here
../include/libhfp/events.h:810:28: error: ‘RegisterDirect’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
RegisterDirect(targp, mfp);
^
../include/libhfp/events.h:810:28: note: declarations in dependent base ‘libhfp::CallbackAdapter<void, libhfp::ArgSet<libhfp::TimerNotifier*, libhfp::Nil, libhfp::Nil, libhfp::Nil, libhfp::Nil, libhfp::Nil> >’ are not found by unqualified lookup
../include/libhfp/events.h:810:28: note: use ‘this->RegisterDirect’ instead
../include/libhfp/events.h: In instantiation of ‘void libhfp::Callback<void, TA1, TA2>::Register(TargT*, void (TargT::*)(TA1, TA2)) [with TargT = libhfp::BtHub; TA1 = libhfp::SocketNotifier*; TA2 = int]’:
bt.cpp:1254:53: required from here
../include/libhfp/events.h:853:28: error: ‘RegisterDirect’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
RegisterDirect(targp, mfp);
^
../include/libhfp/events.h:853:28: note: declarations in dependent base ‘libhfp::CallbackAdapter<void, libhfp::ArgSet<libhfp::SocketNotifier*, int, libhfp::Nil, libhfp::Nil, libhfp::Nil, libhfp::Nil> >’ are not found by unqualified lookup
../include/libhfp/events.h:853:28: note: use ‘this->RegisterDirect’ instead
../include/libhfp/events.h: In instantiation of ‘void libhfp::Callback<void, TA1>::operator()(TA1) [with TA1 = libhfp::ErrorInfo*]’:
bt.cpp:1415:30: required from here
../include/libhfp/events.h:816:13: error: ‘Invoke’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
Invoke(ia);
^
../include/libhfp/events.h:816:13: note: declarations in dependent base ‘libhfp::CallbackAdapter<void, libhfp::ArgSet<libhfp::ErrorInfo*, libhfp::Nil, libhfp::Nil, libhfp::Nil, libhfp::Nil, libhfp::Nil> >’ are not found by unqualified lookup
../include/libhfp/events.h:816:13: note: use ‘this->Invoke’ instead
../include/libhfp/events.h: In instantiation of ‘void libhfp::Callback<void, TA1, TA2>::operator()(TA1, TA2) [with TA1 = libhfp::BtDevice*; TA2 = libhfp::ErrorInfo*]’:
bt.cpp:1447:27: required from here
../include/libhfp/events.h:859:13: error: ‘Invoke’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
Invoke(ia);
^
../include/libhfp/events.h:859:13: note: declarations in dependent base ‘libhfp::CallbackAdapter<void, libhfp::ArgSet<libhfp::BtDevice*, libhfp::ErrorInfo*, libhfp::Nil, libhfp::Nil, libhfp::Nil, libhfp::Nil> >’ are not found by unqualified lookup
../include/libhfp/events.h:859:13: note: use ‘this->Invoke’ instead
../include/libhfp/events.h: In instantiation of ‘void libhfp::Callback<void, TA1>::Register(TargT*, void (TargT::*)(TA1)) [with TargT = libhfp::BtHub; TA1 = libhfp::HciTask*]’:
bt.cpp:1506:58: required from here
../include/libhfp/events.h:810:28: error: ‘RegisterDirect’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
RegisterDirect(targp, mfp);
^
../include/libhfp/events.h:810:28: note: declarations in dependent base ‘libhfp::CallbackAdapter<void, libhfp::ArgSet<libhfp::HciTask*, libhfp::Nil, libhfp::Nil, libhfp::Nil, libhfp::Nil, libhfp::Nil> >’ are not found by unqualified lookup
../include/libhfp/events.h:810:28: note: use ‘this->RegisterDirect’ instead
../include/libhfp/events.h: In instantiation of ‘void libhfp::Callback<void, TA1>::operator()(TA1) [with TA1 = libhfp::BtManaged*]’:
bt.cpp:1705:31: required from here
../include/libhfp/events.h:816:13: error: ‘Invoke’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
Invoke(ia);
^
../include/libhfp/events.h:816:13: note: declarations in dependent base ‘libhfp::CallbackAdapter<void, libhfp::ArgSet<libhfp::BtManaged*, libhfp::Nil, libhfp::Nil, libhfp::Nil, libhfp::Nil, libhfp::Nil> >’ are not found by unqualified lookup
../include/libhfp/events.h:816:13: note: use ‘this->Invoke’ instead
../include/libhfp/events.h: In instantiation of ‘void libhfp::Callback<void, TA1>::Register(TargT*, void (TargT::*)(TA1)) [with TargT = libhfp::BtDevice; TA1 = libhfp::HciTask*]’:
bt.cpp:1784:65: required from here
../include/libhfp/events.h:810:28: error: ‘RegisterDirect’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
RegisterDirect(targp, mfp);
^
../include/libhfp/events.h:810:28: note: declarations in dependent base ‘libhfp::CallbackAdapter<void, libhfp::ArgSet<libhfp::HciTask*, libhfp::Nil, libhfp::Nil, libhfp::Nil, libhfp::Nil, libhfp::Nil> >’ are not found by unqualified lookup
../include/libhfp/events.h:810:28: note: use ‘this->RegisterDirect’ instead
../include/libhfp/events.h: In instantiation of ‘void libhfp::Callback<void, TA1, TA2, TA3>::operator()(TA1, TA2, TA3) [with TA1 = libhfp::BtDevice*; TA2 = const char*; TA3 = libhfp::ErrorInfo*]’:
bt.cpp:1813:48: required from here
../include/libhfp/events.h:903:13: error: ‘Invoke’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
Invoke(ia);
^
../include/libhfp/events.h:903:13: note: declarations in dependent base ‘libhfp::CallbackAdapter<void, libhfp::ArgSet<libhfp::BtDevice*, const char*, libhfp::ErrorInfo*, libhfp::Nil, libhfp::Nil, libhfp::Nil> >’ are not found by unqualified lookup
../include/libhfp/events.h:903:13: note: use ‘this->Invoke’ instead
make[2]: *** [bt.o] Error 1
make[2]: Leaving directory '/home/Adama-docs/Adam/Adam/linux/tmp/nohands/libhfp'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/home/Adama-docs/Adam/Adam/linux/tmp/nohands'
make: *** [all] Error 2
Tags bluetooth pulseaudio sound