[REGRESSION] Services asked for by UDEV do not get triggered
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
| Release Notes for Ubuntu |
Undecided
|
Unassigned | ||
| systemd |
New
|
Unknown
|
||
| systemd (Ubuntu) |
Low
|
Unassigned |
Bug Description
The packages system-
/lib/udev/
----------
# Low-level USB device add trigger
ACTION=="add", SUBSYSTEM=="usb", ENV{DEVTYPE}
# Low-level USB device remove trigger
ACTION=="remove", SUBSYSTEM=="usb", ENV{DEVTYPE}
----------
/lib/udev/
----------
# ippusbxd udev rules file
ACTION=="add", SUBSYSTEM=="usb", ENV{DEVTYPE}
----------
If I turn on an appropriate printer (USB, supporting IPP-over-USB, here the HP DeskJet 2540) I get in the output of "udevadm monitor --environment"
----------
UDEV [17527.514150] add /devices/
ACTION=add
BUSNUM=002
DEVNAME=
DEVNUM=033
DEVPATH=
DEVTYPE=usb_device
DRIVER=usb
ID_BUS=usb
ID_MODEL=
ID_MODEL_
ID_MODEL_ID=c211
ID_REVISION=0100
ID_SERIAL=
ID_SERIAL_
ID_USB_
ID_VENDOR=HP
ID_VENDOR_ENC=HP
ID_VENDOR_
ID_VENDOR_ID=03f0
MAJOR=189
MINOR=160
PRODUCT=
SEQNUM=9891
SUBSYSTEM=usb
SYSTEMD_
TAGS=:udev-
TYPE=0/0/0
USEC_INITIALIZE
UDEV [17527.517724] add /devices/
.MM_USBIFNUM=00
ACTION=add
DEVPATH=
DEVTYPE=
ID_VENDOR_
INTERFACE=255/204/0
MODALIAS=
PRODUCT=
SEQNUM=9892
SUBSYSTEM=usb
TYPE=0/0/0
USEC_INITIALIZE
UDEV [17527.522565] add /devices/
.MM_USBIFNUM=02
ACTION=add
DEVPATH=
DEVTYPE=
ID_VENDOR_
INTERFACE=255/4/1
MODALIAS=
PRODUCT=
SEQNUM=9895
SUBSYSTEM=usb
TYPE=0/0/0
USEC_INITIALIZE
UDEV [17527.523761] add /devices/
.MM_USBIFNUM=01
ACTION=add
DEVPATH=
DEVTYPE=
DRIVER=usblp
ID_VENDOR_
INTERFACE=7/1/2
MODALIAS=
PRODUCT=
SEQNUM=9893
SUBSYSTEM=usb
TYPE=0/0/0
USEC_INITIALIZE
UDEV [17527.527275] add /devices/
.MM_USBIFNUM=01
ACTION=add
DEVNAME=
DEVPATH=
MAJOR=180
MINOR=1
SEQNUM=9894
SUBSYSTEM=usbmisc
USEC_INITIALIZE
----------
Here one can see that the UDEV rules files are correct, leading to the correct systemd services being requested
SYSTEMD_
but neither the service ippusbxd@
I can start each of these services manually though:
sudo systemctl start 'udev-configure
sudo systemctl start ippusbxd@
In each case ippusbxd gets started for this printer and a print queue auto-created.
What I expect is that the services get automatically started (and that worked in 17.04) so that after plugging in an USB printer I can immediately print as the print queue gets created automatically.
The "udev-configure
This is a regression as we had always automatic setup of USB printers.
Till Kamppeter (till-kamppeter) wrote : | #1 |
tags: | added: rls-aa-incoming |
Launchpad Janitor (janitor) wrote : | #2 |
Status changed to 'Confirmed' because the bug affects multiple users.
Changed in systemd (Ubuntu): | |
status: | New → Confirmed |
Till Kamppeter (till-kamppeter) wrote : | #3 |
It seems that with a 70-printers.rules as follows at least a correct service name is generated
----------
# Low-level USB device add trigger
ACTION=="add", SUBSYSTEM=="usb", ENV{DEVTYPE}
# Low-level USB device remove trigger
ACTION=="remove", SUBSYSTEM=="usb", ENV{DEVTYPE}
----------
Note that in the first rule the systemd-escape command has NO "-p" option and that the %c for ENV{SYSTEMD_WANTS} has extra single quotes. Compared to the original file only these single quotes got added.
After restarting UDEV with
sudo udevadm control --reload
and re-plugging the printer in most cases the service does not get started.
systemctl status 'udev-configure
gives something like
----------
● udev-configure-
Loaded: loaded (/lib/systemd/
Active: inactive (dead)
----------
In such a case one can start the service manually with
sudo systemctl start 'udev-configure
and this starts correctly udev-configure printer which sets up the printer (and starts ippusbxd if needed).
In some very few cases the service actually gets correctly started (and the printer set up) when one plugs the printer, but this happens rarely (can there be some kind of race condition?).
So this only rarely happening automatic start of the printer setup service is now the problem. The escaping seems to be fixed by the extra single quotes.
Dimitri John Ledkov (xnox) wrote : | #4 |
This is not critical. The service is started, but the encoding/decoding of the %i name appears to be not round-trip safe.
Changed in systemd (Ubuntu): | |
importance: | Critical → High |
Dimitri John Ledkov (xnox) wrote : | #5 |
Given that the service is oneshot, I need a full output of the journal to see what has happened to said service.
Dimitri John Ledkov (xnox) wrote : | #6 |
Could you please record udevmock dump of plugging in and out a USB printer and attach the udevmock file here?
https:/
Till Kamppeter (till-kamppeter) wrote : | #7 |
I have looked through Pitti's (upstream author) instructions of the tool, ut it seems that it only works on the already running device and that there is no way to capture the startup and shutdown sequences.
I have recorded the main record of the device this way:
till@till-
[...]
Bus 002 Device 009: ID 03f0:c211 Hewlett-Packard
[...]
till@till-
I have attached the file.
One can record device operations, but only those which can get triggered by a shell command, not those who are triggered by a manual operation on the device (plug/unplug, power-cycle, press button, ...).
Is there a shell command which triggers a shutdown, start-up, or reboot of the printer? Especially one has to take into account that the device keeps only its bus ID and the device ID increments by 1.
@pitti, is there a way to record start-up or shutdown of a USB device?
Till Kamppeter (till-kamppeter) wrote : | #8 |
I have tried recording startup and shutdown now by recording with the command "sleep 10" and doing the manual operation (plugging/
For unplugging I did
sudo umockdev-record --ioctl=
and unplugged the USB plug right after pressing Enter. After waiting for the command to exit I did not get a deskjet-
For plugging I did
sudo umockdev-record --ioctl=
with the intention to plug the printer right after issuing the command.
Note that after repugging the printer will appear under Bus:Device 002:010 so I used /dev/bus/
So any help to record start-up and shutdown of a USB device is appreciated.
Till Kamppeter (till-kamppeter) wrote : | #9 |
Here is the systemd journal of plugging the printer, taken with
journalctl -o verbose -f 2>&1 | tee systemd-
After issuing the command (with printer unplugged) I waited some seconds to see that there is no further output happening. Then I plugged the printer and waited for no further output happening again and stopped the command with Ctrl+C. Output is attached.
Till Kamppeter (till-kamppeter) wrote : | #10 |
Now I have proceeded as described in the previous comment for unplugging the printer, issuing this command with the printer still plugged:
journalctl -o verbose -f 2>&1 | tee systemd-
waited some seconds, unplugged the printer, waited some seconds, Ctrl+C. Output attached.
Sebastien Bacher (seb128) wrote : | #11 |
Till, you should perhaps open a bug on systemd upstream on github since it's likely an issue there? There might have a clue about it or people who are available to debug the issue...
Till Kamppeter (till-kamppeter) wrote : | #12 |
Reported this bug upstream:
Changed in systemd: | |
status: | Unknown → New |
Changed in ubuntu-release-notes: | |
status: | New → Fix Released |
Changed in systemd (Ubuntu): | |
importance: | High → Critical |
summary: |
- Services asked for by UDEV do not get triggered + [REGRESSION] Services asked for by UDEV do not get triggered |
tags: | added: regression-release |
Till Kamppeter (till-kamppeter) wrote : | #13 |
Now in Bionic the only systemd problem known to me is the quoting/unquoting turnaround problem mentioned here.
In system-
Another, more severe severe systemd problem in Artful was that systemd did not unregister (at least some) USB devices when they got unplugged. This problem went away in Bionic.
So in Bionic I do not have any problems with USB printer auto-setup any more.
Changed in systemd (Ubuntu): | |
importance: | Critical → Low |
Some discussion with xnox on IRC helped me to get to a possible cause of the problem:
journalctl -u udev-configure- printer@ -devices- pci0000: 00-0000: 00:14.0- usb2-2x2d2. service > journalctl-u.txt
gives (file redirection prevents trimming ;lines to terminal width):
---------- pci0000: 00-0000: 00:14.0- usb2-2x2d2) ... printer[ 23296]: add /devices/ pci0000: 00/0000: 00:14.0/ usb2/2x2d2 printer[ 23296]: unable to access /sys/devices/ pci0000: 00/0000: 00:14.0/ usb2/2x2d2 printer@ -devices- pci0000: 00-0000: 00:14.0- usb2-2x2d2. service: Control process exited, code=exited status=1 pci0000: 00-0000: 00:14.0- usb2-2x2d2) . printer@ -devices- pci0000: 00-0000: 00:14.0- usb2-2x2d2. service: Unit entered failed state. printer@ -devices- pci0000: 00-0000: 00:14.0- usb2-2x2d2. service: Failed with result 'exit-code'.
-- Logs begin at Mon 2017-10-09 09:07:44 -03, end at Mon 2017-10-09 12:17:45 -03. --
Oct 09 11:29:17 till-x1carbon systemd[1]: Starting Automatic USB/Bluetooth printer setup (-devices-
Oct 09 11:29:17 till-x1carbon udev-configure-
Oct 09 11:29:17 till-x1carbon udev-configure-
Oct 09 11:29:17 till-x1carbon systemd[1]: udev-configure-
Oct 09 11:29:17 till-x1carbon systemd[1]: Failed to start Automatic USB/Bluetooth printer setup (-devices-
Oct 09 11:29:17 till-x1carbon systemd[1]: udev-configure-
Oct 09 11:29:17 till-x1carbon systemd[1]: udev-configure-
----------
The directory which needs to get accessed by udev-configure- printer is: /sys/devices/ pci0000: 00/0000: 00:14.0/ usb2/2- 2, note that the second last character is a dash. UDEV/systemd(?) inserts for the %i in the second line of the /lib/systemd/ system/ udev-configure- printer@ .service file: -devices- pci0000: 00-0000: 00:14.0- usb2-2x2d2, replacing each slash by a dash and the original dash by "x2d" (should it not be "\x2d"? Not sure what gets inserted for the %I in the ExecStart line, but udev-configure- printer ends up with a /sys/devices/ pci0000: 00/0000: 00:14.0/ usb2/2x2d2 which it does not find as the "x2d" is not turned back into a dash.
This worked in 17.04 so it is a regression.