| ``` | |
| 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. | |
| ``` |