Yanıtlar:
Varsayılan kablosuz durumu etkileyen en az iki Upstart işi vardır:
/etc/init/rfkill-restore.conf
kaydedildiği gibi tüm telsizler için yumuşak blok durumunu son kapanışta olduklarına geri yükler /var/lib/rfkill/saved-state
./etc/init/network-manager.conf
daha sonra kablosuz durum fikrini geri yükleyen Network Manager'ı başlatır /var/lib/NetworkManager/NetworkManager.state
.Bu iki iş konfigürasyonuna bakarsanız, benim için bir tasarım hatası gibi görünen geçici bir ilişkilerinin olmadığını göreceksiniz . Bu yarış koşulunun nadiren bir sorun olduğunu tahmin ediyorum çünkü /etc/init/rfkill-restore.conf
çok daha basit ve daha az başlangıç koşulu var.
@Lekensteyn ve @ rubo77'nin ortaya çıkardığı "modern" çözüm de /etc/rc.local
dahil olmak üzere gördüğüm bir kablosuz bağlantı varsayılanını uygulamaya yönelik tüm çözümler . Ne yazık ki, bu çözüm denediğim iki dizüstü bilgisayarda da işe yaramıyor. Bunun nedeni özellikle şaşırtıcı değildir ayrıca sahip hiçbir zamansal ilişki Ben birine bulabilmesi ve . Bir yarış vermeden önce uzun bir uykuya atmak, bu yarış durumu karmaşası için çirkin bir çözümdür, ancak gecikme yeterince uzunsa işe yarar./etc/rc.local
/etc/init/rfkill-restore.conf
/etc/init/network-manager.conf
/etc/rc.local
rfkill block wifi
Bu iki Upstart işinin yürütülmesine izin verilmeden önce/var/lib/rfkill/saved-state
ve daha /var/lib/NetworkManager/NetworkManager.state
önce arzu ettiğimiz durumları dayatmamız daha iyi bir çözüm olacaktır . Bunu kendi Upstart işimizi oluşturarak başarabiliriz. Aslında, ihtiyacımız olan zamanlamayı elde etmek için iki iş yapılandırma dosyasına ihtiyacımız olacak.
İlk iş yapılandırmamız ihtiyacımız olan gerçek dosya değişikliklerini yapar. Mümkün olduğunca erken çalışır ve yalnızca bir kez çalışır. /etc/init/radio-silence.conf
Bu içerikle oluştur :
# 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
Dizüstü bilgisayarım başlatıldığında toplam radyo sessizliğini tercih ettiğim için , yalnızca kablosuz değil, tüm radyoları yumuşak bir şekilde engelliyorum , ancak sed
bu işin etkisini yumuşak engellemek istediğiniz kablosuz cihazlarla sınırlamak için yukarıdaki ilkini değiştirebilirsiniz .
İkinci iş yapılandırma hiçbiri sağlamaktan sorumludur rfkill-restore
ve network-manager
işler önce başlayacak radio-silence
dosya değişiklikleri tamamladı. Aşağıdaki /etc/init/radio-silence-wait.conf
gibi oluşturun :
# 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
Bu çözümle, rfkill-restore
ve arasındaki teorik ırkı ele almamamla birlikte, artık yarış durumu problemlerini görmüyorum network-manager
.
Bu işlerin geçici amacımıza ulaşmak için birlikte nasıl çalıştığı hakkında daha fazla ayrıntı için, "Diğer iki iş başlamadan önce tamamlanması garantili tek bir yürütme Upstart işi nasıl oluşturabilirim?"
Ağ Yöneticisi'ni kullanarak "modern" çözüm: Ağ Yöneticisi uygulamasındaki Kablosuz Etkin seçeneğinin işaretini kaldırmanız yeterlidir (KDE: Ağ Yönetimi). Komut nmcli nm wifi off
eşdeğerdir. Wi-Fi'yi ara sıra etkinleştirirseniz, ancak yeniden başlatma sırasında devre dışı bırakmak istiyorsanız okumaya devam edin.
Kablosuz durumu dosyada hatırlanır /var/lib/NetworkManager/NetworkManager.state
. Açılışta Wi-Fi devre dışı bırakmak için, bu anahtar sağlamak WirelessEnabled
kalır at false
. Bunu, Ağ Yöneticisi'nin başlatma komut dosyasını düzenleyerek veya /etc/rc.local
aşağıdaki hileyi kullanarak yapabilirsiniz . İhtiyacınız olan komut:
sed s/^WirelessEnabled=true/WirelessEnabled=false/ -i /var/lib/NetworkManager/NetworkManager.state
rfkill block wifi
Bunu daha önce koyun exit 0
(aşağıda açıklandığı gibi). rfkill block wifi
Komut hala nedeniyle Ağ Yöneticisi (NM) oluşturması sırasında bir yarış için gereklidir. NM başladıktan sonra, durum dosyasındaki değişikliklerin bir etkisi yoktur.
( komutun /etc/rc.local
açıklamasıyla birlikte dosya düzenlemeyi içeren eski yanıt rfkill
)
Biraz kibirli, ama işe yaramalı. Kablosuz kart, rfkill
komut kullanılarak devre dışı bırakılabilir . Rfkill tarafından kullanılan tüm cihazlar kullanılarak gösterilebilir rfkill list
. Örnek çıktı:
0: phy0: Wireless LAN
Soft blocked: no
Hard blocked: no
Hard blocked
donanım ayarına bağlıdır, örneğin dizüstü bilgisayardaki kablosuz anahtar. Soft blocked
OS (Ubuntu) tarafından kontrol edilebilir.
O nasıl çalışır? Bir el kitabı yok, çalışan rfkill
bu durumda bir yardım metni sağlar:
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
Ah, şimdi bir yerlere gidiyoruz. rfkill block wifi
Kablosuz cihazı devre dışı bırakmak için root olarak çalıştırmanız gerekir . (WLAN WiFi bir takma, bkz kaynak kodu arasında rfkill ).
Şimdi, önyükleme sırasında kablosuz işlevleri devre dışı bırakmak istiyorsanız, komutu çalıştırarak /etc/rc.local dosyasına ekleyin sudo nano /etc/rc.local
. Önceki satıra gitmek exit 0
ve eklemek için ok tuşlarını / sayfa yukarı / aşağı tuşlarını kullanın rfkill block wifi
, böylece dosya şöyle biter:
# By default, this script does nothing
rfkill block wifi
exit 0
İşiniz bittiğinde Ctrl+ Xtuşuna basın Y, kaydetmek için tuşuna basın Enterve dosya adını kabul etmek için tuşuna basın .
Daha sonra cihazı aktif hale getirmek için karar verirseniz, çalıştırın: sudo rfkill unblock wifi
. Kablosuz kartı kullanmaya karar verirseniz hattı /etc/rc.local dizininden kaldırmayı unutmayın.
/etc/rc.local
Komut dosyası kök izinleriyle çalıştırıldığı için sudo in'e ihtiyacınız yoktur . Kök izinleri olmadan wifi'yi devre dışı bırakmanız pek olası değildir. Ben denerseniz rfkill block wifi
veya rfkill unblock wifi
": İzin reddedildi açılamıyor rfkill kontrol cihazı Can", ben olsun.
$ rfkill block wifi
NetworkManager uygulamasının "Kablosuz devre dışı" $ iwconfig
görüntülenmesine ve görüntülenmesine neden oluyor Tx-Power=off
. $ rfkill unblock wifi
bu efekti geri alır.
/etc/rc.local
. Bunun yerine şunu kullanın:/bin/sleep 10 && rfkill block wifi
/var/lib/NetworkManager/NetworkManager.state
ayarlara devam eden bir dosya var WirelessEnabled=false
, bunlardan biri. Sorunuza mesaj
Kablosuz kartınızı devre dışı bırakmanın en kolay yolu NetworkManager göstergesine (panelin sağ üst köşesindeki küçük simge) sağ tıklamak ve işaretini kaldırmaktır Enable Wireless
. Bu ifconfig wlan0 down
arabirimi indirir ( ) ve artık tarama yapmaz.
tlp
, lütfen tüm cevabı okuyun.Bu sorunun tüm cevapları şu anda oldukça eski ve systemd kullanan yeni Ubuntu sürümlerinde çalışmıyor. froage'nin yanıtı benim için 14.04'te çalıştı, ancak 16.04'te işe yaramadı.
Systemd, systemd-rfkill.service
kapatma sırasında rfkill anahtar durumunu kaydetmek ve her önyüklemede geri yüklemek için kullanır .
Her önyüklemede rfkill anahtar durumunu geri yüklemek için bir çekirdek komut satırı parametresi geçirmeniz gerekir.
/etc/default/grub
tercih metin editörü ile.systemd.restore_state=1
parametre olarak ekle GRUB_CMDLINE_LINUX
. Şimdi bu satır okunmalı GRUB_CMDLINE_LINUX="systemd.restore_state=1"
. Siz de ekleyebilirsiniz GRUB_CMDLINE_LINUX_DEFAULT
. İkisi de işe yarıyor. Daha fazla ayrıntı için bu soruya bakın.Bu, rfkill durumunun her önyüklemede geri yüklenmesini sağlayacaktır. Yeniden başlatmadan önce bluetooth ve wifi'yi kapattığınızdan emin olun.
tlp
:tlp 0.8-1
16.04 depolarda mevcuttu. tlp 0.9-1
Linrunner ppa kullanarak güncelleme yapıldıktan sonra , TÜM sorunlar çözüldü.Orijinal cevap:
tlp
maskeler / devre dışı bıraktığı systemd-rfkill.service
için "önlemek çatışma ve TLP radyo cihazı anahtarlama seçeneklerinin düzgün çalışmasını sağlamak" . ( Kaynak-1 , Kaynak-2 )
Bu, çekirdek parametresini geçmenin sizin için işe yaramayacağı anlamına gelir.
Burada, tlp'nin varsayılan yapılandırma dosyasından ( /etc/default/tlp
) küçük bir snippet (satır no. 195) yer almaktadır .
# 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"
Gördüğünüz gibi RESTORE_DEVICE_STATE_ON_STARTUP
varsayılan seçenek devre dışıdır. Ancak bu seçeneği etkinleştirmek yardımcı olmaz.
RESTORE_DEVICE_STATE_ON_STARTUP
Wifi ve bluetooth'u (kullanarak rfkill block all
) devre dışı bırakıp yeniden başlatmaya devam etmenizi sağladıktan sonra bile , her iki veya 3. önyüklemede bir şekilde WiFi etkinleştirilir. Bir sonraki önyüklemede WiFi'nin devre dışı bırakılacağının garantisi yoktur. tlp
Her önyüklemede bluetooth'u devre dışı bırakmayı şaşırtıcı bir şekilde
yönetir.
Snippet'teki 2. seçenek için de aynı şey geçerlidir DEVICES_TO_DISABLE_ON_STARTUP
, bu da varsayılan olarak devre dışıdır. Etkinleştirmek de işe yaramıyor. Network Manger
WiFi'nin devre dışı olduğunu ancak rfkill list
WiFi'de herhangi bir yazılım bloğu göstermediğini gösterir.
Not: Satırı okudum
"Hint: the parameters DEVICES_TO_DISABLE/ENABLE_ON_STARTUP/SHUTDOWN below are ignored when this is enabled!"
.Çatışmalardan kaçınmadan
RESTORE_DEVICE_STATE_ON_STARTUP
önce devre dışı bıraktımDEVICES_TO_DISABLE_ON_STARTUP
.
tlp-rdw
beklendiği gibi çalışmaz.tlp
Kullanıcılar için çözüm :tlp 0.9-1
Linrunner ppa kullanarak güncelleme .Orijinal Yanıt:
DEVICES_TO_DISABLE_ON_STARTUP
Bluetooth ve WiFi'yi etkinleştirmek ve etkinleştirmek sizin için işe yarayabilir. ( Bu kişi için çalıştı )
Bu soru burada askubuntu hakkında. Bu sorunun daha eski bir cevabına benzer. Ama lütfen kendim denemediğimi unutmayın. Çalışabilir veya çalışmayabilir.
Diğer kaynaklar: systemd-rfkill , tlp-configuration
GRUB_CMDLINE_LINUX
ve Pop_OS'ta çalışamadım! 19.10 (Ubuntu 19.10'a dayanmaktadır). Buna göre , bu hizmet zaten her önyüklemede çalıştırılıyor ve varsayılan değer olduğu için bu çabaya gerek yok. Adresindeki bilgilere dayanarak, "erken önyüklemede" radyo durumunu hatırlamak varsayılan davranış olmalıdır, bu da bu bileşenin bir şekilde bozuk olduğuna inanmamı sağlıyor. GRUB_CMDLINE_LINUX_DEFAULT
sudo update-grub
systemctl status systemd-rfkill
1
man systemd-rfkill
Ekleyebilirsin
ifconfig wlan0 down
için /etc/rc.local
, ama önce,
NetworkManager kullanıyorsanız (0.8.4 ~ git.20110319t175609.d14809b-0ubuntu3 sürümüne sahipseniz) " Bağlantıları Düzenle " -> " Kablosuz " sekmesine gidin, " Düzenle " yi tıklayın ve " Kablosuz " sekmesinde " Otomatik Olarak Bağlan " onay kutusunun işaretli olmadığından emin olun.
rfkill
.