domingo, 16 de abril de 2017

Dual Boot (Windows 10 - Ubuntu Mate 17.04) y Microsoft Designer Bluetooth Desktop

Acabo de solucionar el problema, el lío es que el Microsoft Designer Bluetooth Desktop sólo puede emparejarse con un dispositivo a la vez, y como se pueden dar cuenta, al momento de tener mi equipo con dual boot, mi laptop se convierte en dos equipos, lo cual implica que si quiero usar el mouse y teclados bluetooth entonces debo emparejarlos cada que cambio de sistema operativo... lo cual es inaceptable.

Creo identificar al menos dos soluciones:

  • Cambiar de hardware por alguno que soporte al menos la conexión a dos dispositivos, esto es que el mismo hardware pueda recordar las credenciales de conexión con al menos dos dispositivos.
  • Compartir las credenciales de conexión entre los dos sistemas operativos, para el caso son Windows 10 y Ubuntu Mate 17.04.
Como la primera solución no requiere de mayor detalle, vamos a detallar los pasos para la segunda solución:
  1. Instalar tanto el mouse como el teclado en el equipo con Ubuntu y luego en el equipo con Windows 10, finalmente regresar a Ubuntu y seguir con los pasos.
  2. Ya estando en Ubuntu instalar la aplicación chntpw, con el siguiente comando en la terminal:
    sudo apt-get install chntpw
  3. Montar la unidad de disco donde se encuentra en sistema operativo Windows 10.
  4. Dirigirse a la siguiente ruta
    cd /media/<usuario>/<id dispositivo>/Windows/System32/config
  5. Una vez en la ubicación ejecutar lo siguiente:
    chntpw -e SYSTEM
  6. Haciendo uso de ls y cd, llegar a la siguiente ruta, o a la más aproximada
    ControlSet001\Services\BTHPORT\Parameters\Keys
  7. Finalmente con ls y la instrucción hex visualizar lo siguiente:
    (...)\Services\BTHPORT\Parameters\Keys> ls
    Node has 1 subkeys and 0 values
      key name
      <mac bluetooth del equipo>
  8. La entrada encontrada corresponde al número mac de la interfaz bluetooth del equipo anfitrión, en este caso se trata de la interfaz bluetooth de mi laptop.
  9. Para este caso, internamente deben haber al menos dos entradas, cada una corresponde a la mac de los dispositivos (teclado y mouse) los cuales necesito exportar a Ubuntu para su uso, veamos uno de los casos.
    (...)\Parameters\Keys\<mac host>\<mac dispositivo>> ls
    Node has 0 subkeys and 9 values
      size     type              value name             [value if type DWORD]
        16  3 REG_BINARY         <LTK>
         4  4 REG_DWORD          <KeyLength>                0 [0x0]
         8  b REG_QWORD          <ERand>
         4  4 REG_DWORD          <EDIV>                  5908 [0x1714]
        16  3 REG_BINARY         <IRK>
         8  b REG_QWORD          <Address>
         4  4 REG_DWORD          <AddressType>              1 [0x1]
        16  3 REG_BINARY         <CSRK>
         4  4 REG_DWORD          <AuthReq>                  5 [0x5]
  10. Para ver cada una de las entradas a estos elementos basta con el comando hex, su uso es sel siguiente:
    (...)\Parameters\Keys\<mac host>\<mac dispositivo>> hex LTK
    Value <LTK> of type REG_BINARY (3), data length 16 [0x10]
    :00000  DC FF 0B 6E 68 89 66 CE 7B 47 59 49 DF F7 ED A0 ...nh.f.{GYI....
  11. La parte importante son los 16 pares de números hexadecimales que definen el valor de la entrada.
  12. Ahora, a transferir la data, para eso en otra terminal
    cd /var/lib/bluetooth
    sudo su
  13. Necesitamos acceso administrativo (root) para poder seguir adelante:
    cd <mac host>
    ls
  14. Acá es donde podemos ver las macs de los dispositivos como nombres de carpetas, lean bien los números y comparenlos con los consignados en el registro de windows, ya que existen ligeras diferencias, que serán corregidas así:
    mv <mac dispositivo linux> <mac dispositivo windows>
  15. Luego entramos a la carpeta renombrada (mac dispositivo windows) y vemos que sólo hay dos archivos, uno es info y el otro es attributes, nos interesa info.
  16. Editamos el contenido de info por consola con:
    nano info
  17. De lo siguiente nos interesa modificar varias cosas:
    [IdentityResolvingKey]
    Key=15A6A585B495F4AD799016629C9EAB0F

    [LocalSignatureKey]
    Key=732CB4C379E52E795C5F0F4DA98A1993
    Counter=0
    Authenticated=true

    [LongTermKey]
    Key=DCFF0B6E688966CE7B475949DFF7EDA0
    Authenticated=1
    EncSize=16
    EDiv=5908
    Rand=12270735187039466977
  18. Ya estamos cuesta abajo, lo que debemos hacer ahora es mapear lo siguiente:
    1. El valor IRK se coloca sin espacios en el valor de [IdentityResolvingKey]
    2. El valor LTK se coloca sin espacios en el valor de [LongTermKey]
    3. El valor CSRK se coloca sin espacios en el valor de [LocalSignatureKey]
    4. El valor EDIV se coloca en el valor de EDiv
  19. Ya casi... ahora con mucho cuidado reemplazar el valor de Rand.
    1. Para el valor Rand, se usa el valor de ERand, el cual está en hexadecimal y debe ser invertido en pares (A5 32 C4...) pasa a ser (...C432A5), y se calcula su valor decimal, dicho número decimal se coloca en Rand.
  20. Finalmente reiniciar Ubuntu y se deberían emparejar solos ambos dispositivos, claro que hay que seguir los pasos desde el 14 dos veces para ambos dispositovos.
Listo, con esto tenemos nuestro hardware bluetooth conectado a dos sistemas operativos en la misma máquina, la verdad no lo he probado con parlantes, sólo con el mouse y teclado de Microsoft Designer Bluetooth Desktop. No olviden escribir para saber como les fué.

Fuentes:

  1. https://unix.stackexchange.com/questions/255509/bluetooth-pairing-on-dual-boot-of-windows-linux-mint-ubuntu-stop-having-to-p
  2. http://console.systems/2014/09/how-to-pair-low-energy-le-bluetooth.html


No hay comentarios:

Publicar un comentario