답변:
기본 무선 상태에 영향을주는 Upstart 작업이 두 개 이상 있습니다.
/etc/init/rfkill-restore.conf
에 기록 된대로 모든 라디오의 소프트 블록 상태를 마지막 종료시의 상태로 복원합니다 /var/lib/rfkill/saved-state
./etc/init/network-manager.conf
네트워크 관리자를 시작하여에서 무선 상태에 대한 아이디어를 복원합니다 /var/lib/NetworkManager/NetworkManager.state
.이 두 가지 작업 구성을 보면 시간적 관계 가 없다는 것을 알 수 있습니다 . 이는 설계상의 결함처럼 보입니다. /etc/init/rfkill-restore.conf
훨씬 간단하고 시작 조건이 적기 때문에이 경쟁 조건은 거의 문제가되지 않습니다 .
@Lekensteyn과 @ rubo77이 제안한 "현대"솔루션 을 /etc/rc.local
포함하여 내가 본 무선 끄기 기본값을 적용하기위한 모든 솔루션을 사용하려고합니다 . 불행히도, 그 해결책은 내가 시도한 두 개의 노트북 중 하나에서 나에게 적합하지 않습니다. 때문에 특히 놀라운 일이 아니다 또한 이없는 시간적인 관계 내가 중 하나를 찾을 수 및 . 를 발행하기 전에 긴 수면을 취하는 것은 이 경쟁 조건 혼란에 대한 추악한 해결책이지만 지연 시간이 충분히 길면 작동합니다./etc/rc.local
/etc/init/rfkill-restore.conf
/etc/init/network-manager.conf
/etc/rc.local
rfkill block wifi
우리가 우리의 원하는 상태를 부과하는 더 나은 솔루션이 될 것입니다 /var/lib/rfkill/saved-state
및 /var/lib/NetworkManager/NetworkManager.state
전에 두 갑자기 출세 한 작업이도 실행이 허용됩니다. 자체 Upstart 작업을 생성하여이를 달성 할 수 있습니다. 실제로 필요한 타이밍을 달성하려면 두 가지 작업 구성 파일이 필요합니다.
첫 번째 작업 구성은 필요한 실제 파일 수정을 수행합니다. 가능한 빨리 실행되며 한 번만 실행됩니다. /etc/init/radio-silence.conf
이 컨텐츠로 작성하십시오 .
# radio-silence - Ensure radio silence on startup
#
# Override default startup behaviour of radios to ensure they are all
# disabled until the user deliberately enables them. This job requires
# radio-silence-wait to delay start of any services that may depend on
# resources manipulated by this job.
description "Disable all radios by default"
start on local-filesystems
pre-start script
sed -i -re "s/^(.+[[:space:]]+)[01][[:space:]]*\$/\11/" /var/lib/rfkill/saved-state
sed -i -re "s/^(WirelessEnabled=).*\$/\1false/" /var/lib/NetworkManager/NetworkManager.state
end script
랩톱을 시작할 때 총 무선 침묵을 선호 하므로 무선뿐만 아니라 모든 무선을 부드럽게 차단 하지만 sed
위 작업 중 첫 번째 를 수정 하여이 차단 작업을 무선 차단하려는 무선 장치에 미치는 영향을 제한 할 수 있습니다 .
두 번째 작업 구성은 파일 수정을 완료 하기 전에 rfkill-restore
및 network-manager
작업이 시작 되지 않도록하는 역할을합니다 radio-silence
. 다음 /etc/init/radio-silence-wait.conf
과 같이 작성하십시오 .
# radio-silence-wait - Helper task for radio-silence
#
# Delays the start of all jobs that may depend on resources manipulated
# by radio-silence job. Avoids the need to modify job configuration of
# those other jobs.
description "Assist radio-silence by delaying jobs it affects"
start on (starting rfkill-restore or starting network-manager)
stop on (started radio-silence or stopped radio-silence)
instance $JOB
normal exit 0 2
task
script
status radio-silence | grep -q "start/running" && exit 0
start radio-silence || true
sleep infinity
end script
나는 사이의 이론적 인 경주를 해결하지 않은 있지만,이 솔루션을 나는 더 이상 경쟁 조건 문제를보고하지하고 rfkill-restore
와 network-manager
.
이러한 작업이 시간 목표를 달성하기 위해 함께 작동하는 방법에 대한 자세한 내용은 " 질문과 대답 "을 참조하십시오 . "다른 두 개의 작업이 시작되기 전에 단일 실행 Upstart 작업을 완료하려면 어떻게해야합니까?"
Network Manager를 사용한 "현대"솔루션 : Network Manager 애플릿 (KDE : 네트워크 관리)에서 무선 사용 옵션을 선택 취소하면 됩니다. 명령 nmcli nm wifi off
은 동일합니다. 산발적으로 Wi-Fi를 사용하도록 설정했지만 재부팅시 사용 안함으로 되돌리려면 계속 읽으십시오.
무선 상태는 파일에서 기억됩니다 /var/lib/NetworkManager/NetworkManager.state
. 부팅시 Wi-Fi를 비활성화하려면 키 WirelessEnabled
가에 머물러 있는지 확인하십시오 false
. Network Manager의 init 스크립트를 편집하거나 /etc/rc.local
아래 의 트릭 을 사용하여이를 수행 할 수 있습니다. 필요한 명령은 다음과 같습니다.
sed s/^WirelessEnabled=true/WirelessEnabled=false/ -i /var/lib/NetworkManager/NetworkManager.state
rfkill block wifi
이것을 exit 0
아래에 기술하십시오. rfkill block wifi
명령은 여전히 때문에 네트워크 관리자 (NM)의 시작과 함께 경주에 필요합니다. NM이 시작되면 상태 파일에 대한 변경 사항은 적용되지 않습니다.
( 명령에 /etc/rc.local
대한 설명과 함께 파일 을 편집하는 이전 답변 rfkill
)
약간 해 키지 만 작동해야합니다. rfkill
명령을 사용하여 무선 카드를 비활성화 할 수 있습니다 . rfkill에서 사용하는 모든 장치는을 사용하여 표시 할 수 있습니다 rfkill list
. 샘플 출력 :
0: phy0: Wireless LAN
Soft blocked: no
Hard blocked: no
Hard blocked
예를 들어 노트북의 무선 스위치와 같은 하드웨어 설정에 따라 다릅니다. Soft blocked
OS (우분투)로 제어 할 수 있습니다.
어떻게 작동합니까? 맨 페이지가 없으므로 running rfkill
은이 경우 도움말 텍스트를 제공합니다.
Usage: rfkill [options] command
Options:
--version show version (0.4)
Commands:
help
event
list [IDENTIFIER]
block IDENTIFIER
unblock IDENTIFIER
where IDENTIFIER is the index no. of an rfkill switch or one of:
<idx> all wifi wlan bluetooth uwb ultrawideband wimax wwan gps fm
아, 이제 어딘가에 도착합니다. rfkill block wifi
무선 장치를 비활성화하려면 루트 로 실행해야합니다 . (wlan은 wifi의 별명입니다 . rfkill 의 소스 코드 를 참조 하십시오 ).
부팅시 무선 기능을 비활성화하려면을 실행하여 /etc/rc.local에 명령을 추가하십시오 sudo nano /etc/rc.local
. 화살표 키 / 페이지 위로 / 아래로 키를 사용하여 이전 줄로 이동 한 다음 exit 0
추가 rfkill block wifi
하여 파일이 다음과 같이 끝나도록합니다.
# By default, this script does nothing
rfkill block wifi
exit 0
완료되면 Ctrl+ X을 누른 다음을 눌러 Y저장 Enter하고을 눌러 파일 이름을 적용하십시오.
나중에 장치를 활성화하기로 결정한 경우 다음을 실행하십시오 sudo rfkill unblock wifi
.. 무선 카드를 사용하기로 결정한 경우 /etc/rc.local에서 회선을 제거하는 것을 잊지 마십시오.
/etc/rc.local
스크립트가 루트 권한으로 실행 되므로 sudo in이 필요하지 않습니다 . 루트 권한없이 wifi를 비활성화 할 가능성은 거의 없습니다. rfkill block wifi
또는을 시도 rfkill unblock wifi
하면 "RFKILL 제어 장치를 열 수 없습니다 : 권한이 거부되었습니다"라는 메시지가 나타납니다.
$ rfkill block wifi
하면 NetworkManager 애플릿에 "Wireless is disabled"가 표시되고이 $ iwconfig
표시됩니다 Tx-Power=off
. $ rfkill unblock wifi
이 효과를 취소합니다.
/etc/rc.local
합니다. 대신 이것을 사용하십시오 :/bin/sleep 10 && rfkill block wifi
/var/lib/NetworkManager/NetworkManager.state
설정을 유지 하는 파일 이 있습니다 WirelessEnabled=false
. 질문에 게시하겠습니다.
무선 카드를 비활성화하는 가장 쉬운 방법은 NetworkManager 표시기 (패널의 오른쪽 위에 작은 아이콘)를 마우스 오른쪽 단추로 클릭하고을 선택 해제하는 것 Enable Wireless
입니다. ifconfig wlan0 down
인터페이스 가 다운되고 ( ) 더 이상 스캔을 수행하지 않습니다.
tlp
전체 답변을 읽으십시오.이 질문에 대한 모든 대답은 지금은 구식이며 systemd를 사용하는 최신 Ubuntu 릴리스에서는 작동하지 않습니다. froage의 답변 은 14.04에서 저에게 효과적 이지만 16.04에서는 작동하지 않습니다.
Systemd는 systemd-rfkill.service
종료 중에 rfkill 스위치 상태를 저장하고 매 부팅마다 복원합니다.
매번 부팅 할 때마다 rfkill 스위치 상태를 복원하려면 커널 명령 줄 매개 변수를 전달해야합니다.
/etc/default/grub
원하는 텍스트 편집기로 엽니 다 .systemd.restore_state=1
매개 변수로 추가하십시오 GRUB_CMDLINE_LINUX
. 그 줄은 이제 읽습니다 GRUB_CMDLINE_LINUX="systemd.restore_state=1"
. 추가 할 수도 있습니다 GRUB_CMDLINE_LINUX_DEFAULT
. 그들 중 하나가 작동합니다. 자세한 내용은이 질문 을 참조하십시오.이렇게하면 부팅 할 때마다 rfkill 상태가 복원됩니다. 다시 시작하기 전에 블루투스와 Wi-Fi를 끄십시오.
tlp
:tlp 0.8-1
16.04 리포지토리에서 사용할 수있는 이러한 문제가있었습니다 . tlp 0.9-1
linrunner ppa 를 사용하여 업데이트 한 후 모든 문제가 해결되었습니다.원래 답변 :
tlp
마스크 / 비활성화 systemd-rfkill.service
에 "피 충돌 및 TLP의 무선 장치의 스위칭 옵션의 적절한 동작을 보장" . ( 소스 1 , 소스 2 )
이것은 커널 매개 변수를 전달하는 것이 효과가 없다는 것을 의미합니다.
다음은 tlp의 기본 구성 파일 ( /etc/default/tlp
) 에서 가져온 작은 스 니펫 (줄 번호 195 )입니다.
# Restore radio device state (Bluetooth, WiFi, WWAN) from previous shutdown
# on system startup: 0=disable, 1=enable.
# Hint: the parameters DEVICES_TO_DISABLE/ENABLE_ON_STARTUP/SHUTDOWN below
# are ignored when this is enabled!
RESTORE_DEVICE_STATE_ON_STARTUP=0
# Radio devices to disable on startup: bluetooth, wifi, wwan.
# Separate multiple devices with spaces.
#DEVICES_TO_DISABLE_ON_STARTUP="bluetooth wifi wwan"
# Radio devices to enable on startup: bluetooth, wifi, wwan.
# Separate multiple devices with spaces.
#DEVICES_TO_ENABLE_ON_STARTUP="wifi"
보시다시피 옵션 RESTORE_DEVICE_STATE_ON_STARTUP
은 기본적으로 비활성화되어 있습니다. 그러나 해당 옵션을 활성화해도 도움이되지 않습니다.
옵션을 활성화 한 후에도 RESTORE_DEVICE_STATE_ON_STARTUP
Wi-Fi 및 블루투스를 비활성화하고 (을 사용하여 rfkill block all
) 계속 다시 시작 하더라도 두 번째 또는 세 번째 부팅마다 WiFi가 활성화됩니다. 다음 부팅시 WiFi가 비활성화 될 것이라는 보장은 없습니다. 놀랍게도
tlp
모든 부팅에서 블루투스를 비활성화 상태로 유지합니다.
스 니펫의 두 번째 옵션도 동일 DEVICES_TO_DISABLE_ON_STARTUP
하며 기본적으로 비활성화되어 있습니다. 활성화해도 작동하지 않습니다. Network Manger
WiFi가 비활성화되었지만 WiFi에 rfkill list
소프트 블록이 표시되지 않음을 나타냅니다.
참고 : 나는 라인을 읽었습니다
"Hint: the parameters DEVICES_TO_DISABLE/ENABLE_ON_STARTUP/SHUTDOWN below are ignored when this is enabled!"
.충돌을 피하기
RESTORE_DEVICE_STATE_ON_STARTUP
전에 비활성화했습니다DEVICES_TO_DISABLE_ON_STARTUP
.
tlp-rdw
예상대로 작동하지 않습니다.tlp
사용자를 위한 솔루션 :tlp 0.9-1
linrunner ppa 사용으로 업데이트하십시오 .원래 답변 :
사용 DEVICES_TO_DISABLE_ON_STARTUP
하고 당신을 위해 작동 할 수 비활성화 블루투스 및 WiFi로 설정. ( 그것은이 사람을 위해 일 )
이 질문 은 askubuntu에 있습니다. 이 질문에 대한 이전 답변과 비슷합니다. 그러나 나는 그것을 직접 시도하지 않았다는 점에 유의하십시오. 작동하거나 작동하지 않을 수 있습니다.
다른 출처 : systemd-rfkill , tlp-configuration
GRUB_CMDLINE_LINUX
하고 GRUB_CMDLINE_LINUX_DEFAULT
플러스 (언급되지 않은) sudo update-grub
명령을 나는 Pop_OS에서 일하기를 가져올 수 없습니다! 19.10 (우분투 19.10을 기반으로 함). 에 따르면 systemctl status systemd-rfkill
이 서비스는 부팅 할 때마다 이미 실행 중이며 기본값은 1
이므로이 작업이 필요하지 않습니다. 의 정보를 기반으로 man systemd-rfkill
"초기 부팅시"라디오 상태를 기억하는 것이 기본 동작이어야하므로이 구성 요소가 손상되었다고 생각하게됩니다.
추가 할 수 있습니다
ifconfig wlan0 down
에 /etc/rc.local
, 그러나 첫째로,
NetworkManager를 사용중인 경우 (버전 0.8.4 ~ git.20110319t175609.d14809b-0ubuntu3) 메뉴 " 연결 편집 "-> " 무선 "탭으로 이동 한 후 연결을 클릭하고 " 편집 "을 클릭 하십시오 . " 무선 "탭에서 " 자동 연결 "확인란이 선택되어 있지 않은지 확인하십시오 .
rfkill
.