내 시스템 서비스(부팅 시 블루투스를 끄는)는 부팅 시에만 실행되어야 한다고 생각합니까?

내 시스템 서비스(부팅 시 블루투스를 끄는)는 부팅 시에만 실행되어야 한다고 생각합니까?

시작할 때 블루투스를 끄는 systemd 서비스를 작성했지만 필요할 때 블루투스 상단 패널 애플릿 아이콘을 통해 블루투스를 켤 수 있기를 원합니다.

시작 시 블루투스를 끄는 기능이 훌륭합니다. 수동으로 켜는 것을 테스트한 것 같습니다.

최근에 블루투스 스피커를 구입해서 연결해 보았습니다.

하지만 블루투스를 켤 때마다 (약 10초 후에) 다시 꺼지고 로그에는 꺼지는 것이 내 서비스라고 표시됩니다.

(더 혼란스러운 점은 연결을 시도한 첫날 몇 곡의 교향곡을 연주할 수 있을 만큼 오랫동안 스피커에 연결할 수 있었다는 것입니다. 셋째 날부터 Bluetooth가 계속 꺼졌습니다.)

제가 잘못 이해한 걸까요? 서비스는 시작 시 한 번만 실행될 것이라고 생각합니다. 그 밖에 지정해야 할 사항이 있나요?

아래는 최신 버전의 서비스입니다.

내가 주석 처리하면 Type=oneshot동일하게 작동합니다. 에서 까지의 심볼릭 링크를 WantedBy=bluetooth.target생성 하고 심볼릭 링크가 없으면 서비스가 전혀 실행되지 않기 때문에 포함시켰습니다 ./etc/systemd/system/bluetooth.target.wants/turn-bluetooth-off.service/etc/systemd/system/turn-bluetooth-off.service

sudo rfkill unblock bluetooth블루투스를 켜면 더 좋은 효과는 없습니다.

[Unit]
Description=Service to always turn bluetooth off at system start time
After=bluetooth.service
After=NetworkManager.service
After=network-online.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/turn-bluetooth-off.sh

[Install]
WantedBy=multi-user.target
WantedBy=bluetooth.target

및 파일/usr/local/bin/turn-bluetooth-off.sh

#!/bin/bash

date > /root/disk_space_report.txt
rfkill block bluetooth
du -sh /home/ >> /root/disk_space_report.txt

난 달린다

$ systemctl daemon-reload
$ systemctl enable turn-bluetooth-off.service
Created symlink from /etc/systemd/system/default.target.wants/turn-bluetooth-off.service to /etc/systemd/system/turn-bluetooth-off.service.

재부팅하면 다음과 같이 journalctl --unit=bluetooth 표시됩니다(일부 행은 빨간색으로 표시됨).

-- Logs begin at Mon 2020-06-08 17:18:28 CEST, end at Mon 2020-06-08 17:43:45 CEST. --
Jun 08 17:18:41 Otilia systemd[1]: Starting Bluetooth service...
Jun 08 17:18:41 Otilia bluetoothd[824]: Bluetooth daemon 5.37
Jun 08 17:18:41 Otilia systemd[1]: Started Bluetooth service.
Jun 08 17:18:41 Otilia bluetoothd[824]: Starting SDP server
Jun 08 17:18:42 Otilia bluetoothd[824]: Bluetooth management interface 1.13 initialized
Jun 08 17:18:44 Otilia bluetoothd[824]: Failed to obtain handles for "Service Changed" characteristic
Jun 08 17:18:44 Otilia bluetoothd[824]: Not enough free handles to register service
Jun 08 17:18:44 Otilia bluetoothd[824]: Error adding Link Loss service
Jun 08 17:18:44 Otilia bluetoothd[824]: Not enough free handles to register service
Jun 08 17:18:44 Otilia bluetoothd[824]: Not enough free handles to register service
Jun 08 17:18:44 Otilia bluetoothd[824]: Not enough free handles to register service
Jun 08 17:18:44 Otilia bluetoothd[824]: Current Time Service could not be registered
Jun 08 17:18:44 Otilia bluetoothd[824]: gatt-time-server: Input/output error (5)
Jun 08 17:18:44 Otilia bluetoothd[824]: Not enough free handles to register service
Jun 08 17:18:44 Otilia bluetoothd[824]: Not enough free handles to register service
Jun 08 17:18:44 Otilia bluetoothd[824]: Sap driver initialization failed.
Jun 08 17:18:44 Otilia bluetoothd[824]: sap-server: Operation not permitted (1)
Jun 08 17:19:38 Otilia bluetoothd[824]: Failed to obtain handles for "Service Changed" characteristic
Jun 08 17:19:38 Otilia bluetoothd[824]: Not enough free handles to register service
Jun 08 17:19:38 Otilia bluetoothd[824]: Error adding Link Loss service
Jun 08 17:19:38 Otilia bluetoothd[824]: Not enough free handles to register service
Jun 08 17:19:38 Otilia bluetoothd[824]: Not enough free handles to register service
Jun 08 17:19:38 Otilia bluetoothd[824]: Not enough free handles to register service
Jun 08 17:19:38 Otilia bluetoothd[824]: Current Time Service could not be registered
Jun 08 17:19:38 Otilia bluetoothd[824]: gatt-time-server: Input/output error (5)
Jun 08 17:19:38 Otilia bluetoothd[824]: Not enough free handles to register service
Jun 08 17:19:38 Otilia bluetoothd[824]: Not enough free handles to register service
Jun 08 17:19:38 Otilia bluetoothd[824]: Sap driver initialization failed.
Jun 08 17:19:38 Otilia bluetoothd[824]: sap-server: Operation not permitted (1)
Jun 08 17:19:39 Otilia bluetoothd[824]: Endpoint registered: sender=:1.48 path=/MediaEndpoint/A2DPSource
Jun 08 17:19:39 Otilia bluetoothd[824]: Endpoint registered: sender=:1.48 path=/MediaEndpoint/A2DPSink

다음 journalctl --unit=turn-bluetooth-off을 표시합니다.

-- Logs begin at Mon 2020-06-08 17:18:28 CEST, end at Mon 2020-06-08 17:43:45 CEST. --
Jun 08 17:18:51 Otilia systemd[1]: Starting Service to always turn bluetooth off at system start time...
Jun 08 17:21:21 Otilia systemd[1]: Started Service to always turn bluetooth off at system start time.

그리고 rfkill list all

0: Toshiba Bluetooth: Bluetooth
    Soft blocked: no
    Hard blocked: no
1: phy0: Wireless LAN
    Soft blocked: no
    Hard blocked: no
3: hci0: Bluetooth
    Soft blocked: yes
    Hard blocked: no

참고: 때로는 hci0표시되지 않고 소프트 블록이 다른 항목 중 하나에 표시될 수도 있습니다.

이제 블루투스 상단 패널 애플릿을 사용하여 블루투스를 켜려고 합니다. 애플릿은 ON을 표시한 다음 약 10초 후에 다시 OFF를 표시합니다.

새로운 출력은 다음에서 나옵니다.journalctl --unit=bluetooth

Jun 08 20:43:29 Otilia bluetoothd[824]: Failed to obtain handles for "Service Changed" characteristic
Jun 08 20:43:29 Otilia bluetoothd[824]: Not enough free handles to register service
Jun 08 20:43:29 Otilia bluetoothd[824]: Error adding Link Loss service
Jun 08 20:43:29 Otilia bluetoothd[824]: Not enough free handles to register service
Jun 08 20:43:29 Otilia bluetoothd[824]: Not enough free handles to register service
Jun 08 20:43:29 Otilia bluetoothd[824]: Not enough free handles to register service
Jun 08 20:43:29 Otilia bluetoothd[824]: Current Time Service could not be registered
Jun 08 20:43:29 Otilia bluetoothd[824]: gatt-time-server: Input/output error (5)
Jun 08 20:43:29 Otilia bluetoothd[824]: Not enough free handles to register service
Jun 08 20:43:29 Otilia bluetoothd[824]: Not enough free handles to register service
Jun 08 20:43:29 Otilia bluetoothd[824]: Sap driver initialization failed.
Jun 08 20:43:29 Otilia bluetoothd[824]: sap-server: Operation not permitted (1)
Jun 08 20:43:29 Otilia bluetoothd[824]: Endpoint registered: sender=:1.48 path=/MediaEndpoint/A2DPSource
Jun 08 20:43:29 Otilia bluetoothd[824]: Endpoint registered: sender=:1.48 path=/MediaEndpoint/A2DPSink
Jun 08 20:43:31 Otilia bluetoothd[824]: Endpoint unregistered: sender=:1.48 path=/MediaEndpoint/A2DPSource
Jun 08 20:43:31 Otilia bluetoothd[824]: Endpoint unregistered: sender=:1.48 path=/MediaEndpoint/A2DPSink

새로운 출력은 다음에서 나옵니다.journalctl --unit=turn-bluetooth-off

Jun 08 20:43:30 Otilia systemd[1]: Starting Service to always turn bluetooth off at system start time...
Jun 08 20:43:33 Otilia systemd[1]: Started Service to always turn bluetooth off at system start time.

그리고 rfkill list all

0: Toshiba Bluetooth: Bluetooth
    Soft blocked: yes
    Hard blocked: no
1: phy0: Wireless LAN
    Soft blocked: no
    Hard blocked: no

내 서비스가 다시 실행되는 원인을 알 수 없습니다. 돕다!

답변1

좋아, 해결책을 찾았습니다. 종료 시 Bluetooth 설정(켜기 또는 끄기)이 다음 시작 시에도 유지된다는 것을 방금 깨달았습니다. 그래서 내 서비스가 전혀 필요하지 않습니다. 웃는 얼굴.

일반적인 블루투스 기능은 좋지는 않지만 그래도 사용할 수 있습니다.

관련 정보