Subject: bug#35640: Make USB modems just work on Guix

From: "pelzflorian (Florian Pelz)" <[email-masked]>
Date: Wed, 8 May 2019 20:26:07 +0200

When plugging in a USB modem, i.e. a “surf stick” / internet stick
with a SIM card for mobile broadband, setup should be as simple as
WiFi.  However, a few things are missing in Guix.

First, the manual claims:

 -- Scheme Variable: modem-manager-service-type
     […]
     This service is part of ‘%desktop-services’ (*note Desktop
     Services::).

But it is not part of %desktop-services.  The first attached patch
fixes this oversight.

Now I can type this to get an internet connection:

sudo nmcli connection add type gsm ifname ttyUSB1 apn internet

However, I want to be able to do this setup graphically.  I made a
second patch to propagate iso-codes (for mobile broadband country
selection) and mobile-broadband-provider-selection (for selecting
defaults for providers) in nm-connection-editor
(network-manager-applet) and gnome-control-center.

Propagation is ugly though.  Should I try patching
network-manager-applet instead?  I assume there are other packages
doing such patching that I can imitate.

Now I can configure the modem as Mobile Broadband in a graphical
interface.  I cannot do so in nmtui; I believe this modem setup
feature is not included in nmtui.

However, this is not the whole truth.  Before I can configure
anything, I have to run

sudo ~/usr/sbin/usb_modeswitch -c ~/Downloads/usb-modeswitch-data-20170806/usb_modeswitch.d/12d1:14fe -v 0x12d1 -p 0x14fe

because my modem by default presents itself as a CD containing Windows
drivers and not as a USB modem.  Preferrably, usb-modeswitch and
usb-modeswitch-data would be packaged (as a single package).  I can
try that later this week.

Lastly, there are udev rules in usb-modeswitch, I believe, because on
Debian I do not need to run any command; mode switching happens
automatically when plugging in the USB modem.  I suppose that means
there should also be a usb-modeswitch-service-type extending udev?

Regards,
Florian

>From 5e9b45fe785dee52da2a67fbecbabc4741f85e54 Mon Sep 17 00:00:00 2001
From: Florian Pelz <[email-masked]>
Date: Tue, 7 May 2019 11:51:43 +0200
Subject: [PATCH 1/2] services: Include ModemManager in %desktop-services.

* gnu/services/desktop.scm (%desktop-services): Add modem-manager-service-type.
---
 gnu/services/desktop.scm | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/gnu/services/desktop.scm b/gnu/services/desktop.scm
index 5e0bd102a2..c0300c0ddc 100644
--- a/gnu/services/desktop.scm
+++ b/gnu/services/desktop.scm
@@ -1062,6 +1062,9 @@ dispatches events from it.")))
 
          ;; The D-Bus clique.
          (service network-manager-service-type)
+         (service modem-manager-service-type) ;the manual claims this were
+                                              ;part of %desktop-services, but
+                                              ;it wasn’t
          (service wpa-supplicant-service-type)    ;needed by NetworkManager
          (service avahi-service-type)
          (udisks-service)
-- 
2.21.0

>From d489f805599ea63e2e06727a3201572ee0480a60 Mon Sep 17 00:00:00 2001
From: Florian Pelz <[email-masked]>
Date: Wed, 8 May 2019 20:02:00 +0200
Subject: [PATCH 2/2] gnu: network-manager-applet: Propagate packages required
 for USB modem setup.

* gnu/packages/gnome.scm (network-manager-applet): Propagate iso-codes and
  mobile-broadband-provider-info.
  (gnome-control-center): Ditto.
---
 gnu/packages/gnome.scm | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index 7c40a39f01..a3765007bf 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -5511,10 +5511,12 @@ to virtual private networks (VPNs) via OpenVPN.")
      ;; libnm-gtk.pc refers to all these.
      `(("dbus-glib" ,dbus-glib)
        ("gtk+" ,gtk+)
+       ("iso-codes" ,iso-codes) ;mobile broadband country selection
+       ("mobile-broadband-provider-info"
+        ,mobile-broadband-provider-info) ;mobile broadband provider selection
        ("network-manager" ,network-manager)))
     (inputs
-     `(("iso-codes" ,iso-codes)
-       ("libgudev" ,libgudev)
+     `(("libgudev" ,libgudev)
        ("libnotify" ,libnotify)
        ("libsecret" ,libsecret)
        ("libselinux" ,libselinux)
@@ -5895,6 +5897,10 @@ devices using the GNOME desktop.")
        ("smbclient" ,samba)
        ("tzdata" ,tzdata)
        ("upower" ,upower)))
+    (propagated-inputs
+     `(("iso-codes" ,iso-codes) ;mobile broadband country selection
+       ("mobile-broadband-provider-info"
+        ,mobile-broadband-provider-info))) ;mobile broadband provider selection
     (synopsis "Utilities to configure the GNOME desktop")
     (home-page "https://www.gnome.org/")
     (description
-- 
2.21.0