Bluetooth: Difference between revisions
imported>Samueldr m Adds a troubleshooting section for bad bluetooth usb dongles. |
imported>HLandau No edit summary |
||
Line 1: | Line 1: | ||
== Enabling == | ==Enabling Bluetooth support== | ||
To enable support for Bluetooth devices, add {{nixos:option|hardware.bluetooth.enable}} to <tt>/etc/nixos/configuration.nix</tt>: | |||
<syntaxhighlight lang="nix">{ | <syntaxhighlight lang="nix">{ | ||
... | |||
hardware.bluetooth.enable = true; | hardware.bluetooth.enable = true; | ||
... | |||
}</syntaxhighlight> | }</syntaxhighlight> | ||
{{evaluate}} | {{evaluate}} | ||
== Pairing == | ==Pairing Bluetooth devices== | ||
{{expansion}} | {{expansion}} | ||
In order to use Bluetooth devices, they must be paired with your NixOS machine. Heavier desktop environments will usually provide a Bluetooth management GUI which you can use to pair devices. | |||
If your desktop environment does not provide such a GUI, you can install the <tt>blueman</tt> package. This provides a tray icon process (<tt>blueman-applet</tt>) and a GUI management application (<tt>blueman-manager</tt>). | |||
===Pairing devices from the command line=== | |||
Alternatively, Bluetooth devices can be paired from the command line using <tt>bluetoothctl</tt>. | |||
<syntaxhighlight lang="console">$ bluetoothctl | <syntaxhighlight lang="console">$ bluetoothctl | ||
Line 30: | Line 29: | ||
[bluetooth] # connect [hex-address]</syntaxhighlight> | [bluetooth] # connect [hex-address]</syntaxhighlight> | ||
== Bluetooth headsets with PulseAudio == | ==Using Bluetooth headsets with PulseAudio== | ||
To allow Bluetooth audio devices to be used with PulseAudio, amend <tt>/etc/nixos/configuration.nix</tt> as follows: | |||
<syntaxhighlight lang="nix">{ | <syntaxhighlight lang="nix">{ | ||
... | |||
hardware.pulseaudio = { | hardware.pulseaudio = { | ||
enable = true; | enable = true; | ||
# NixOS allows either a lightweight build (default) or full build of PulseAudio to be installed. | |||
# Only the full build has Bluetooth support, so it must be selected here. | |||
package = pkgs.pulseaudioFull; | package = pkgs.pulseaudioFull; | ||
}; | }; | ||
hardware.bluetooth.enable = true; | hardware.bluetooth.enable = true; | ||
... | |||
}</syntaxhighlight> | }</syntaxhighlight> | ||
{{evaluate}} | {{evaluate}} | ||
You will need to restart PulseAudio; try <tt>pkill '^pulseaudio$'</tt>. | |||
< | You can verify that PulseAudio has loaded the Bluetooth module by running <tt>pactl list | grep -i 'Name.*module.*blue'</tt>; Bluetooth modules should be present in the list. | ||
</ | |||
===Managing audio devices=== | |||
< | <tt>pavucontrol</tt> can be used to reconfigure the device: | ||
* To enable A2DP, change the profile to “High Fidelity Playback (A2DP Sink)” on the “Configuration” tab. | |||
* To set the device as the default audio output, select “set as fallback” on the “Output Devices” tab. | |||
Alternatively, the device can be configured via the command line: | |||
== | * To enable A2DP, run: <syntaxhighlight lang="console">$ pacmd set-card-profile "$(pactl list cards short | egrep -o bluez_card[[:alnum:]._]+)" a2dp_sink</syntaxhighlight> | ||
* To set the device as the default audio output, run: <syntaxhighlight lang="console">$ pacmd set-default-sink "$(pactl list sinks short | egrep -o bluez_sink[[:alnum:]._]+)"</syntaxhighlight> | |||
Some USB | ==Troubleshooting== | ||
===USB device needs to be unplugged/re-plugged after suspend=== | |||
Some USB device/host combinations don't play well with the suspend/resume cycle, and need to be unplugged and then re-plugged to work again. | |||
It is possible to simulate a unplug/re-plug cycle using the < | It is possible to simulate a unplug/re-plug cycle using the <tt>/sys</tt> filesystem. | ||
[https://gist.github.com/samueldr/356e65374d452e4fd45314f818ae3545 This gist] provides a script and instructions to set-up a workaround for these devices. | [https://gist.github.com/samueldr/356e65374d452e4fd45314f818ae3545 This gist] provides a script and instructions to set-up a workaround for these devices. | ||
== | ==See also== | ||
* [http://anderspapitto.com/posts/2016-11-07-scripting_pulseaudio_bluetooth_jack.html Scripting PulseAudio, Bluetooth, JACK] | |||
* [https://wiki.archlinux.org/index.php/Bluetooth Bluetooth (Arch Linux Wiki)] | |||
[[Category:Installation]][[Category:Configuration]][[Category:Hardware]] |
Revision as of 17:16, 24 October 2017
Enabling Bluetooth support
To enable support for Bluetooth devices, add hardware.bluetooth.enable
to /etc/nixos/configuration.nix:
{
...
hardware.bluetooth.enable = true;
...
}
Pairing Bluetooth devices
In order to use Bluetooth devices, they must be paired with your NixOS machine. Heavier desktop environments will usually provide a Bluetooth management GUI which you can use to pair devices.
If your desktop environment does not provide such a GUI, you can install the blueman package. This provides a tray icon process (blueman-applet) and a GUI management application (blueman-manager).
Pairing devices from the command line
Alternatively, Bluetooth devices can be paired from the command line using bluetoothctl.
$ bluetoothctl
[bluetooth] # power on
[bluetooth] # agent on
[bluetooth] # default-agent
[bluetooth] # scan on
...put device in pairing mode and wait [hex-address] to appear here...
[bluetooth] # pair [hex-address]
[bluetooth] # connect [hex-address]
Using Bluetooth headsets with PulseAudio
To allow Bluetooth audio devices to be used with PulseAudio, amend /etc/nixos/configuration.nix as follows:
{
...
hardware.pulseaudio = {
enable = true;
# NixOS allows either a lightweight build (default) or full build of PulseAudio to be installed.
# Only the full build has Bluetooth support, so it must be selected here.
package = pkgs.pulseaudioFull;
};
hardware.bluetooth.enable = true;
...
}
You will need to restart PulseAudio; try pkill '^pulseaudio$'.
You can verify that PulseAudio has loaded the Bluetooth module by running pactl list | grep -i 'Name.*module.*blue'; Bluetooth modules should be present in the list.
Managing audio devices
pavucontrol can be used to reconfigure the device:
- To enable A2DP, change the profile to “High Fidelity Playback (A2DP Sink)” on the “Configuration” tab.
- To set the device as the default audio output, select “set as fallback” on the “Output Devices” tab.
Alternatively, the device can be configured via the command line:
- To enable A2DP, run:
$ pacmd set-card-profile "$(pactl list cards short | egrep -o bluez_card[[:alnum:]._]+)" a2dp_sink
- To set the device as the default audio output, run:
$ pacmd set-default-sink "$(pactl list sinks short | egrep -o bluez_sink[[:alnum:]._]+)"
Troubleshooting
USB device needs to be unplugged/re-plugged after suspend
Some USB device/host combinations don't play well with the suspend/resume cycle, and need to be unplugged and then re-plugged to work again.
It is possible to simulate a unplug/re-plug cycle using the /sys filesystem.
This gist provides a script and instructions to set-up a workaround for these devices.