diff --git a/README.html b/README.html index 6607549..7824827 100644 --- a/README.html +++ b/README.html @@ -24,16 +24,17 @@ Bonjour/Rendezvous DNS-SD service discovery). This can be used on networks that do not allow the user to run a DNS_SD service. The user must run a Bluetooth LE “beacon”, (a USB 4.0 or later “dongle” can be used). The beacon is managed by a Python3 script -uxplay-beacon.py (available in three versions, a BlueZ/DBus -version for Linux/*BSD, a winrt version for Windows, and a version for -the BlueIO usb-serial dongle (which has its own BlueTooth-LE stack -independent of that of the host system) that runs on all systems -including macOS). The beacon runs independently of UxPlay: while UxPlay -is running, it regularly broadcasts a Bluetooth LE (“Low Energy”) 46 -byte legacy-type advertisement informing nearby iOS/macOS devices of the -local IPv4 network address of the UxPlay server, and which TCP port to -contact UxPlay on. Instructions are given below.

+uxplay-beacon.py: three implementations of Bleutooth LE +advertising are available as loadable modules: BlueZ for Linux only, +winrt for Windows only, and BleuIO for the BlueIO usb-serial dongle +(which has its own BlueTooth-LE stack, independent of that of the host +system) that runs on all systems including macOS and *BSD). The beacon +runs independently of UxPlay: while UxPlay is running, it regularly +broadcasts a Bluetooth LE (“Low Energy”) 46 byte legacy-type +advertisement informing nearby iOS/macOS devices of the local IPv4 +network address of the UxPlay server, and which TCP port to contact +UxPlay on. Instructions are given +below.

  • option -vrtp <rest-of-pipeline> bypasses rendering by UxPlay, and instead transmits rtp packets of decrypted h264 or h265 video to an external renderer (e.g. OBS Studio) at an address @@ -478,7 +479,7 @@ package rpmdevtools packages, then create the rpmbuild tree with “rpmdev-setuptree”. Then download and copy uxplay.spec into ~/rpmbuild/SPECS. In that directory, run -“rpmdev-spectool -g -R uxplay.spec” to download the +“pmdev-spectool -g -R uxplay.spec” to download the corresponding source file uxplay-*.tar.gz into ~/rpmbuild/SOURCES (“rpmdev-spectool” may also be just called “spectool”); then run “rpmbuild -ba uxplay.spec” @@ -917,6 +918,14 @@ needed.

  • not affect the (small) initial OpenGL mirror window size, but the window can be expanded using the mouse or trackpad.

    +

    Unfortunately, it seems that the macOS Bluetooth stack does not allow +users to broadcast Bluetooth LE advertisements of the type needed for +Bluetooth LE service discovery (“manufacture-specific” advertisements), +but this can be achieved if you acquire a BleuIO USB dongle which +provides its own Bluetooth LE stack, as a USB serial modem. Bluetooth +Service Discovery is an alternative to Rendezvous/Bonjour DNS_SD, and +can be used on networks that don’t allow DNS_SD. See instructions below.

    Building UxPlay on Microsoft Windows, using MSYS2 with the MinGW-64 @@ -937,10 +946,8 @@ This should install the Bonjour SDK as
    1. (This is for 64-bit Windows; a build for 32-bit Windows should be @@ -1537,25 +1544,44 @@ GST_DEBUG=2” before running uxplay. To see GStreamer information messages, set GST_DEBUG=4; for DEBUG messages, GST_DEBUG=5; increase this to see even more of the GStreamer inner workings.

      Bluetooth LE beacon setup

      -

      The python>=3.6 script for running a Bluetooth-LE Service -Discovery beacon is uxplay-beacon.py. It comes in two versions, one (for -Linux and *BSD) is only installed on systems which support DBUS, and -another only for Windows 10/11. Bluetooth >= 4.0 hardware on the host -computer is required: a cheap USB bluetooth dongle can be used.

      -

      On Linux/*BSD, Bluetooth support (BlueZ) must be installed (on -Debian-based systems: sudo apt install bluez bluez-tools; -recent Ubuntu releases provide bluez as a snap package). In addition to -standard Python3 libraries, you may need to install the gi, dbus, and -psutil Python libraries used by uxplay-beacon.py. On Debian-based -systems:

      +

      The python>=3.6 script for running a Bluetooth LE Service +Discovery beacon is uxplay-beacon.py. It provides three possible +Bluetooth LE implementations: one for Linux systems with D-Bus, one for +Windows, and one for the BleuIO (or +BleuIO Pro) USB dongle with its own on-board Bluetooth-LE Stack that +does not use the host operating system Bluetooth (the Host sees the +device as a USB serial modem). This is needed for macOS where the +operating system does not allow users to send Bluetooth-LE +advertisements of the type we require. If a BleuIO dongle is available, +the bleuio version of the python script can be used on many operating +systems including macOS, Windows and Linux, and perhaps *BSD (not +tested): it requires python library python3-pyserial to be +installed.

      +

      On Linux, Bluetooth support (using the offical Linux Bluetooth stack +BlueZ) must be installed (on Debian-based systems: +sudo apt install bluez bluez-tools; recent Ubuntu releases +provide bluez as a snap package). In addition to standard Python3 +libraries, you may need to install the gi, dbus, and psutil Python +libraries used by uxplay-beacon.py. On Debian-based systems:

      sudo apt install python3-gi python3-dbus python3-psutil
      -

      For Windows support on MSYS2 UCRT systems, use pacman -S to install -mingw-w64-ucrt-x86_64-python, +

      If a python3-gi package is not found, install the python3-gobject +package which provides it.

      +

      For Windows support in the MSYS2 UCRT64 environment, use pacman -S to +install mingw-w64-ucrt-x86_64-python, *-python-gobject, *-python-psutil, and -*-python-pip. Then install winrt bindings: -“pip install winrt-Windows.Foundation.Collections”, also -winrt-Windows.Devices.Bluetooth.Advertisement and -winrt-Windows.Storage.Streams.

      +*-python-pip. Then install winrt bindings +using pip (or pip3):

      +
      pip install winrt-Windows.Foundation 
      +pip install winrt-Windows.Foundation.Collections 
      +pip install winrt-Windows.Devices.Bluetooth.Advertisement 
      +pip install winrt-Windows.Storage.Streams
      +

      For python >= 3.11, the pip commands on “externally-managed” +python installations (such as the one provided in MSYS2) should be

      +
      pip install ....  --break-system-packages
      +

      The option --break-system-packages was required to make +users hesitate before adding packages not provided by the “external +management”: this is unnecessarily scary, as in the case of the +winrt packages, no breakage will occur.

      If uxplay will be run with option “uxplay -ble” (so it writes data for the Bluetooth beacon in the default BLE data file ~/.uxplay.ble), just run uxplay-beacon.py in a @@ -1607,12 +1633,13 @@ instance of UxPlay must also have its own MAC address and ports). not been tested, and this option might not be useful or needed.

    2. -

      NEW While the native macOS BlueTooth-LE does not -allow users to send “manufacturer-specific” advertisements like the -uxplay service discovery announcement, this can be achieved using the -BleuIO dongle, which is a usb-serial device with its own full -BlueTooth-LE implementation (the bleuio version of uxplay-beacon.py is -installed in macOS systems, but works on all operating systems).

      +

      While the native macOS BlueTooth-LE does not allow users to send +“manufacturer-specific” advertisements like the uxplay service discovery +announcement, this can be achieved using the BleuIO dongle, which is a +usb-serial device with its own full Bluetooth LE implementation (the +BleuIO module for uxplay-beacon.py is installed with UxPlay in all +operating systems, including macos and *BSD, while the BlueZ and winrt +modules are only installed on Linux and Windows, respectively).

      If you wish to test Bluetooth LE Service Discovery on Linux/*BSD, you can disable DNS_SD Service discovery by the avahi-daemon with

      $ sudo systemctl mask avahi-daemon.socket
      diff --git a/README.md b/README.md
      index 1ff96cc..21c043e 100644
      --- a/README.md
      +++ b/README.md
      @@ -13,13 +13,14 @@
       
       -   Support for **service discovery using a Bluetooth LE "beacon"** for both Linux/\*BSD and Windows (as an alternative to Bonjour/Rendezvous DNS-SD
           service discovery). **This can be used on networks that do not allow the user to run a  DNS_SD service.**   The user must run a Bluetooth LE "beacon", (a USB 4.0 or
      -    later "dongle" can be used). The beacon is managed by a Python3 script `uxplay-beacon.py` (available in three versions, a BlueZ/DBus version
      -    for Linux/\*BSD, a winrt version for Windows, and a version for the BlueIO usb-serial dongle (which has its own BlueTooth-LE stack independent of that of the
      -    host system) that runs
      -    on all systems including macOS).   The beacon
      +    later "dongle" can be used). The beacon is managed by a Python3 script `uxplay-beacon.py`: three implementations of Bleutooth LE advertising are available
      +    as loadable modules: BlueZ for Linux only,  winrt for Windows only, and BleuIO
      +    for the BlueIO usb-serial dongle (which has its own BlueTooth-LE stack, independent of that of the
      +    host system) that runs on all systems including macOS and *BSD).   The beacon
           runs independently of UxPlay: while UxPlay is running, it regularly broadcasts a Bluetooth LE ("Low Energy") 46 byte
           legacy-type advertisement  informing nearby iOS/macOS devices of
      -    the local IPv4 network address of the UxPlay server, and which TCP port to contact UxPlay on. Instructions are [given below](#bluetooth-le-beacon-setup).
      +    the local IPv4 network address of the UxPlay server, and which TCP port to contact UxPlay on.  Instructions
      +    are [given below](#bluetooth-le-beacon-setup).
       
       -   option `-vrtp `  bypasses rendering by UxPlay, and instead
           transmits rtp packets of decrypted h264 or h265 video to
      @@ -464,9 +465,8 @@ package](#building-an-installable-rpm-package).
       
       First-time RPM builders should first install the rpm-build and
       rpmdevtools packages, then create the rpmbuild tree with
      -"`rpmdev-setuptree`". Then download and copy uxplay.spec into
      -`~/rpmbuild/SPECS`. In that directory, run
      -"`rpmdev-spectool -g -R  uxplay.spec`" to download the corresponding
      +"`rpmdev-setuptree`". Then download and copy uxplay.spec into `~/rpmbuild/SPECS`. In
      +that directory, run "`pmdev-spectool -g -R  uxplay.spec`" to download the corresponding
       source file `uxplay-*.tar.gz` into `~/rpmbuild/SOURCES`
       ("rpmdev-spectool" may also be just called "spectool"); then run
       "`rpmbuild -ba uxplay.spec`" (you will need to install any required
      @@ -912,6 +912,12 @@ downloads, "UxPlay" for "git clone" downloads) and build/install with
           affect the (small) initial OpenGL mirror window size, but the window
           can be expanded using the mouse or trackpad.
       
      +Unfortunately, it seems that the macOS  Bluetooth stack does not allow users to broadcast Bluetooth LE advertisements
      +of the type needed for Bluetooth LE service discovery ("manufacture-specific" advertisements),
      +but this can be achieved if you acquire a BleuIO  USB dongle which provides its own Bluetooth LE
      +stack, as a USB serial modem.   Bluetooth Service Discovery is an alternative to Rendezvous/Bonjour DNS_SD,
      +and can be used on networks that don't allow DNS_SD.  See [instructions below](#bluetooth-le-beacon-setup).
      +
       ## Building UxPlay on Microsoft Windows, using MSYS2 with the MinGW-64 compiler.
       
       -   tested on Windows 10 and 11, 64-bit.
      @@ -926,8 +932,7 @@ downloads, "UxPlay" for "git clone" downloads) and build/install with
           `C:\Program Files\Bonjour SDK`.
       
         * **NEW: while you still need to install the Bonjour SDK to build UxPlay, there is now an alternative method for
      -    Service Discovery using a Bluetooth Low Energy (BLE) beacon. (Dfferent) Python3 scripts for running the beacon
      -    is on Linux/BSD*, Windows and macOS available for this.** See [instructions below](#bluetooth-le-beacon-setup).
      +    Service Discovery using a Bluetooth Low Energy (BLE) beacon on Windows. See [instructions below](#bluetooth-le-beacon-setup).
       
       2.  (This is for 64-bit Windows; a build for 32-bit Windows should be
           possible, but is not tested.) The unix-like MSYS2 build environment
      @@ -1534,8 +1539,8 @@ debugging, as it is not containerized to make it playable with standard
       audio players.*
       
       **-ble [*filename*]**.  Enable Bluetooth beacon Service Discovery.
      -The port, PID and process name of the UxPlay process is recorded by default in
      -`~/.uxplay.ble` : (this file is created
      +The port, PID and process name of the UxPlay process is recorded by default
      +in `~/.uxplay.ble` : (this file is created
       when UxPlay starts and deleted when it stops.)
       Optionally the  file
       *filename*, which must be the  full path to a  writeable file can instead be used.
      @@ -1553,13 +1558,18 @@ GStreamer inner workings.
       
       # Bluetooth LE beacon setup
       
      -The python>=3.6 script for running a Bluetooth-LE Service Discovery beacon is uxplay-beacon.py.
      -It comes in two versions, one  (for Linux and *BSD) is only installed on systems which
      -support DBUS, and another only for Windows 10/11.    Bluetooth >= 4.0 hardware on the host computer is required: a cheap USB bluetooth dongle
      -can be used.    
      +The python>=3.6 script for running a Bluetooth LE Service Discovery beacon is uxplay-beacon.py.
      +It provides three possible Bluetooth LE implementations:  one for Linux systems with D-Bus,
      +one for Windows, and one for 
      +the [BleuIO (or BleuIO Pro) USB
      +dongle](https://www.bleuio.com)  with its own on-board Bluetooth-LE Stack that
      +does not use the host operating system Bluetooth (the Host sees the device as a USB serial modem).   This is needed for macOS where the
      +operating system does not allow users to send  Bluetooth-LE advertisements of the type we require.  If a BleuIO  dongle is
      +available, the bleuio version of the python script
      +can be used on many operating systems including macOS, Windows and Linux, and perhaps *BSD (not tested):
      +it requires python library `python3-pyserial` to be installed.
       
      -On Linux/*BSD,
      -Bluetooth support (BlueZ) must be installed (on Debian-based systems: `sudo apt install bluez bluez-tools`;
      +On Linux, Bluetooth support (using the offical Linux Bluetooth stack BlueZ) must be installed (on Debian-based systems: `sudo apt install bluez bluez-tools`;
       recent Ubuntu releases provide bluez as a snap package).
       In addition to standard Python3 libraries, you may need to install the gi, dbus, and psutil Python libraries used by
       uxplay-beacon.py.  On Debian-based systems:
      @@ -1567,16 +1577,31 @@ uxplay-beacon.py.  On Debian-based systems:
       ```
       sudo apt install python3-gi python3-dbus python3-psutil
       ```
      +If a python3-gi package is not found, install the python3-gobject package which provides it.
       
      -For Windows support on MSYS2 UCRT systems, use pacman -S to
      +For Windows support in the  MSYS2 UCRT64 environment, use pacman -S to
       install `mingw-w64-ucrt-x86_64-python`, ``*-python-gobject``,
       `*-python-psutil`, and ``*-python-pip``.   Then install **winrt**
      -bindings: "`pip install winrt-Windows.Foundation.Collections`", also
      -``winrt-Windows.Devices.Bluetooth.Advertisement`` and
      -``winrt-Windows.Storage.Streams``.
      +bindings using pip (or pip3):
       
      -If uxplay will be  run with option "`uxplay -ble`" (so it writes data for the Bluetooth beacon in the default BLE data file
      -`~/.uxplay.ble`), just run ``uxplay-beacon.py`` in a separate terminal.    The python script will start
      +```
      +pip install winrt-Windows.Foundation 
      +pip install winrt-Windows.Foundation.Collections 
      +pip install winrt-Windows.Devices.Bluetooth.Advertisement 
      +pip install winrt-Windows.Storage.Streams
      +```
      +For python >= 3.11, the pip commands on "externally-managed" python installations (such as the one provided in MSYS2) should be
      +
      +```
      +pip install ....  --break-system-packages
      +```
      +
      +The option `--break-system-packages` was required to make users hesitate before 
      +adding packages not provided by  the "external management":
      +_this is unnecessarily scary, as in the case of the winrt packages, no breakage will occur_.
      +
      +If uxplay will be  run with option "`uxplay -ble`" (so it writes data for the Bluetooth beacon in the default BLE 
      +data file `~/.uxplay.ble`), just run ``uxplay-beacon.py`` in a separate terminal.    The python script will start
       Bluetooth LE Service-Discovery advertising when it detects that UxPlay is running by checking if the BLE data file exists, and stop when it no longer detects
       a running UxPlay plus this file (it will restart advertising if UxPlay later reappears).   The script will remain active until stopped with Ctrl+C in its
       terminal window (or its terminal window is closed).
      @@ -1607,10 +1632,10 @@ are running to support multiple instances of UxPlay.  Each instance must have it
       file (just as each instance of UxPlay must also have its own MAC address and ports).  _Note:  running multiple beacons simultaneously
       on the same host has not been tested, and this option might not be useful or needed._
       
      -**NEW**  While the native macOS BlueTooth-LE  does not allow users to send "manufacturer-specific" advertisements like the uxplay service discovery
      +While the native macOS BlueTooth-LE  does not allow users to send "manufacturer-specific" advertisements like the uxplay service discovery
       announcement, this can be achieved using the BleuIO dongle, which
      -is a usb-serial device with its own full  BlueTooth-LE implementation (the bleuio version of uxplay-beacon.py is installed in macOS systems, but
      -works on all operating systems).
      +is a usb-serial device with its own full  Bluetooth LE implementation (the BleuIO  module for uxplay-beacon.py is installed with UxPlay
      +in all operating systems, including macos and *BSD, while the BlueZ and winrt modules are only installed on Linux and Windows, respectively).
       
       If you wish to test Bluetooth LE Service Discovery on Linux/*BSD, you can disable DNS_SD Service discovery by the avahi-daemon with
       
      diff --git a/README.txt b/README.txt
      index c36be39..0092baf 100644
      --- a/README.txt
      +++ b/README.txt
      @@ -21,16 +21,17 @@
           networks that do not allow the user to run a DNS_SD service.** The
           user must run a Bluetooth LE "beacon", (a USB 4.0 or later "dongle"
           can be used). The beacon is managed by a Python3 script
      -    `uxplay-beacon.py` (available in three versions, a BlueZ/DBus
      -    version for Linux/\*BSD, a winrt version for Windows, and a version
      -    for the BlueIO usb-serial dongle (which has its own BlueTooth-LE
      -    stack independent of that of the host system) that runs on all
      -    systems including macOS). The beacon runs independently of UxPlay:
      -    while UxPlay is running, it regularly broadcasts a Bluetooth LE
      -    ("Low Energy") 46 byte legacy-type advertisement informing nearby
      -    iOS/macOS devices of the local IPv4 network address of the UxPlay
      -    server, and which TCP port to contact UxPlay on. Instructions are
      -    [given below](#bluetooth-le-beacon-setup).
      +    `uxplay-beacon.py`: three implementations of Bleutooth LE
      +    advertising are available as loadable modules: BlueZ for Linux only,
      +    winrt for Windows only, and BleuIO for the BlueIO usb-serial dongle
      +    (which has its own BlueTooth-LE stack, independent of that of the
      +    host system) that runs on all systems including macOS and \*BSD).
      +    The beacon runs independently of UxPlay: while UxPlay is running, it
      +    regularly broadcasts a Bluetooth LE ("Low Energy") 46 byte
      +    legacy-type advertisement informing nearby iOS/macOS devices of the
      +    local IPv4 network address of the UxPlay server, and which TCP port
      +    to contact UxPlay on. Instructions are [given
      +    below](#bluetooth-le-beacon-setup).
       
       -   option `-vrtp ` bypasses rendering by UxPlay, and
           instead transmits rtp packets of decrypted h264 or h265 video to an
      @@ -490,7 +491,7 @@ First-time RPM builders should first install the rpm-build and
       rpmdevtools packages, then create the rpmbuild tree with
       "`rpmdev-setuptree`". Then download and copy uxplay.spec into
       `~/rpmbuild/SPECS`. In that directory, run
      -"`rpmdev-spectool -g -R  uxplay.spec`" to download the corresponding
      +"`pmdev-spectool -g -R  uxplay.spec`" to download the corresponding
       source file `uxplay-*.tar.gz` into `~/rpmbuild/SOURCES`
       ("rpmdev-spectool" may also be just called "spectool"); then run
       "`rpmbuild -ba uxplay.spec`" (you will need to install any required
      @@ -937,6 +938,15 @@ downloads, "UxPlay" for "git clone" downloads) and build/install with
           affect the (small) initial OpenGL mirror window size, but the window
           can be expanded using the mouse or trackpad.
       
      +Unfortunately, it seems that the macOS Bluetooth stack does not allow
      +users to broadcast Bluetooth LE advertisements of the type needed for
      +Bluetooth LE service discovery ("manufacture-specific" advertisements),
      +but this can be achieved if you acquire a BleuIO USB dongle which
      +provides its own Bluetooth LE stack, as a USB serial modem. Bluetooth
      +Service Discovery is an alternative to Rendezvous/Bonjour DNS_SD, and
      +can be used on networks that don't allow DNS_SD. See [instructions
      +below](#bluetooth-le-beacon-setup).
      +
       ## Building UxPlay on Microsoft Windows, using MSYS2 with the MinGW-64 compiler.
       
       -   tested on Windows 10 and 11, 64-bit.
      @@ -952,10 +962,8 @@ downloads, "UxPlay" for "git clone" downloads) and build/install with
       
       -   \*\*NEW: while you still need to install the Bonjour SDK to build
           UxPlay, there is now an alternative method for Service Discovery
      -    using a Bluetooth Low Energy (BLE) beacon. (Dfferent) Python3
      -    scripts for running the beacon is on Linux/BSD\*, Windows and macOS
      -    available for this.\*\* See [instructions
      -    below](#bluetooth-le-beacon-setup).
      +    using a Bluetooth Low Energy (BLE) beacon on Windows. See
      +    [instructions below](#bluetooth-le-beacon-setup).
       
       2.  (This is for 64-bit Windows; a build for 32-bit Windows should be
           possible, but is not tested.) The unix-like MSYS2 build environment
      @@ -1583,27 +1591,50 @@ this to see even more of the GStreamer inner workings.
       
       # Bluetooth LE beacon setup
       
      -The python\>=3.6 script for running a Bluetooth-LE Service Discovery
      -beacon is uxplay-beacon.py. It comes in two versions, one (for Linux and
      -\*BSD) is only installed on systems which support DBUS, and another only
      -for Windows 10/11. Bluetooth \>= 4.0 hardware on the host computer is
      -required: a cheap USB bluetooth dongle can be used.
      +The python\>=3.6 script for running a Bluetooth LE Service Discovery
      +beacon is uxplay-beacon.py. It provides three possible Bluetooth LE
      +implementations: one for Linux systems with D-Bus, one for Windows, and
      +one for the [BleuIO (or BleuIO Pro) USB dongle](https://www.bleuio.com)
      +with its own on-board Bluetooth-LE Stack that does not use the host
      +operating system Bluetooth (the Host sees the device as a USB serial
      +modem). This is needed for macOS where the operating system does not
      +allow users to send Bluetooth-LE advertisements of the type we require.
      +If a BleuIO dongle is available, the bleuio version of the python script
      +can be used on many operating systems including macOS, Windows and
      +Linux, and perhaps \*BSD (not tested): it requires python library
      +`python3-pyserial` to be installed.
       
      -On Linux/\*BSD, Bluetooth support (BlueZ) must be installed (on
      -Debian-based systems: `sudo apt install bluez bluez-tools`; recent
      -Ubuntu releases provide bluez as a snap package). In addition to
      -standard Python3 libraries, you may need to install the gi, dbus, and
      -psutil Python libraries used by uxplay-beacon.py. On Debian-based
      -systems:
      +On Linux, Bluetooth support (using the offical Linux Bluetooth stack
      +BlueZ) must be installed (on Debian-based systems:
      +`sudo apt install bluez bluez-tools`; recent Ubuntu releases provide
      +bluez as a snap package). In addition to standard Python3 libraries, you
      +may need to install the gi, dbus, and psutil Python libraries used by
      +uxplay-beacon.py. On Debian-based systems:
       
           sudo apt install python3-gi python3-dbus python3-psutil
       
      -For Windows support on MSYS2 UCRT systems, use pacman -S to install
      -`mingw-w64-ucrt-x86_64-python`, `*-python-gobject`, `*-python-psutil`,
      -and `*-python-pip`. Then install **winrt** bindings:
      -"`pip install winrt-Windows.Foundation.Collections`", also
      -`winrt-Windows.Devices.Bluetooth.Advertisement` and
      -`winrt-Windows.Storage.Streams`.
      +If a python3-gi package is not found, install the python3-gobject
      +package which provides it.
      +
      +For Windows support in the MSYS2 UCRT64 environment, use pacman -S to
      +install `mingw-w64-ucrt-x86_64-python`, `*-python-gobject`,
      +`*-python-psutil`, and `*-python-pip`. Then install **winrt** bindings
      +using pip (or pip3):
      +
      +    pip install winrt-Windows.Foundation 
      +    pip install winrt-Windows.Foundation.Collections 
      +    pip install winrt-Windows.Devices.Bluetooth.Advertisement 
      +    pip install winrt-Windows.Storage.Streams
      +
      +For python \>= 3.11, the pip commands on "externally-managed" python
      +installations (such as the one provided in MSYS2) should be
      +
      +    pip install ....  --break-system-packages
      +
      +The option `--break-system-packages` was required to make users hesitate
      +before adding packages not provided by the "external management": *this
      +is unnecessarily scary, as in the case of the winrt packages, no
      +breakage will occur*.
       
       If uxplay will be run with option "`uxplay -ble`" (so it writes data for
       the Bluetooth beacon in the default BLE data file `~/.uxplay.ble`), just
      @@ -1658,12 +1689,13 @@ version (the Windows operating system chooses their values):
           *Note: running multiple beacons simultaneously on the same host has
           not been tested, and this option might not be useful or needed.*
       
      -**NEW** While the native macOS BlueTooth-LE does not allow users to send
      +While the native macOS BlueTooth-LE does not allow users to send
       "manufacturer-specific" advertisements like the uxplay service discovery
       announcement, this can be achieved using the BleuIO dongle, which is a
      -usb-serial device with its own full BlueTooth-LE implementation (the
      -bleuio version of uxplay-beacon.py is installed in macOS systems, but
      -works on all operating systems).
      +usb-serial device with its own full Bluetooth LE implementation (the
      +BleuIO module for uxplay-beacon.py is installed with UxPlay in all
      +operating systems, including macos and \*BSD, while the BlueZ and winrt
      +modules are only installed on Linux and Windows, respectively).
       
       If you wish to test Bluetooth LE Service Discovery on Linux/\*BSD, you
       can disable DNS_SD Service discovery by the avahi-daemon with