43 lines
1.4 KiB
Text
43 lines
1.4 KiB
Text
|
adb can be configured to work with systemd-style socket activation,
|
||
|
allowing the daemon to start automatically when the adb control port
|
||
|
is forwarded across a network. You need two files, placed in the usual
|
||
|
systemd service directories (e.g., ~/.config/systemd/user for a user
|
||
|
service).
|
||
|
|
||
|
adb.service:
|
||
|
|
||
|
--- START adb.service CUT HERE ---
|
||
|
[Unit]
|
||
|
Description=adb
|
||
|
After=adb.socket
|
||
|
Requires=adb.socket
|
||
|
[Service]
|
||
|
Type=simple
|
||
|
# FD 3 is part of the systemd interface
|
||
|
ExecStart=/path/to/adb server nodaemon -L acceptfd:3
|
||
|
--- END adb.service CUT HERE ---
|
||
|
|
||
|
--- START adb.socket CUT HERE ---
|
||
|
[Unit]
|
||
|
Description=adb
|
||
|
PartOf=adb.service
|
||
|
[Socket]
|
||
|
ListenStream=127.0.0.1:5037
|
||
|
Accept=no
|
||
|
[Install]
|
||
|
WantedBy=sockets.target
|
||
|
--- END adb.socket CUT HERE ---
|
||
|
|
||
|
After installing the adb service, the adb server will be started
|
||
|
automatically on any connection to 127.0.0.1:5037 (the default adb
|
||
|
control port), even after adb kill-server kills the server.
|
||
|
|
||
|
Other "superserver" launcher systems (like macOS launchd) can be
|
||
|
configured analogously. The important part is that adb be started with
|
||
|
"server" and "nodaemon" command line arguments and that the listen
|
||
|
address (passed to -L) name a file descriptor that's ready to
|
||
|
accept(2) connections and that's already bound to the desired address
|
||
|
and listening. inetd-style pre-accepted sockets do _not_ work in this
|
||
|
configuration: the file descriptor passed to acceptfd must be the
|
||
|
serve socket, not the accepted connection socket.
|