web-dev-qa-db-ja.com

ワイヤレスハードブロック

Ubuntu 13.10(x64)でLenovo Yoga 2 11 "を使用しています。wifiにわずかな問題があります(bluetoothは動作しています)

私は試した:

Sudo rfkill list

状態:

0: ideapad_wlan: Wireless LAN
    Soft blocked: no
    Hard blocked: yes
1: ideapad_bluetooth: Bluetooth
    Soft blocked: no
    Hard blocked: yes
2: phy0: wireless LAN
    Soft blocked: no
    Hard blocked: no
3: hci0: bluetooth
    Soft blocked: no
    Hard blocked: no

次:

Sudo rfkill unblock all
Sudo rfkill unblock number

彼らはソフトブロックのみで動作します...私のハードブロックはまだ「はい」です。

私のヨガにはハードウェアボタンがありません。 BIOSで設定を試しましたが、機能しませんでした。

誰か他のソリューションがある場合、私は非常に感謝します。

2
oliverbedi

だから、IdeaPad Yoga 2は私のようにrfkillを半ブロックしたように聞こえます。次のように修正する方法を見つけました。

Rfkillは、idead-laptopモジュールによって駆動される組み込みECによって制御されます。このモジュールは、Yoga 2のいくつかの間違った部分を微調整しますが、ありがたいことに、永続的に物を壊すような方法ではありません。

ECは、列挙されたコマンドとプロパティの読み取りおよび書き込みメソッドを備えたACPIプラットフォームデバイスとして存在します。ローカルLinuxソースツリーでideapad-laptop.cを見ると、その構造はかなり明白です。

興味のある3ビットがあります:VPCCMD_W_RF:一般的にRFデバイスをオン/オフしますか?これはideapad_laptop.cでは使用されませんが、その逆のVPCCMD_R_RF -is-であるため、興味深いものです。 VPCCMD_W_BT:Bluetoothデバイスのオン/オフを切り替えます。 VPCCMD_W_WIFI:Wi-Fiのオン/オフを切り替えます。

これらの各コマンドに対して、1を送信すると機能がオンになり、0でオフになります。 W_RFは実際にはヨガでは機能していないと思います。 ideapad-laptopドライバーはその設定を確認し、BTおよびWIFIデバイスのpersistentrfkillフラグをオンにします。

これを修正するには、ローカルバージョンのideapad-laptop.cドライバーをコンパイルします。このドライバーは、できるだけ早く次のコマンドを実行し、モジュールを中止します。

write_ec_cmd(ideapad_handle, VPCCMD_W_RF, 1);
write_ec_cmd(ideapad_handle, VPCCMD_W_BT, 1);
write_ec_cmd(ideapad_handle, VPCCMD_W_WIFI, 1);

その後、/ etc/modprobe.d/whatever.confのファイルにblacklist ideapad-laptopオプションを指定してideapad-laptopモジュールを保持するようにしました。

私はそれ以来順調に働いています。

残念ながら、ideapad-laptopモジュールはカーネルバージョンから別のカーネルバージョンに変更されているため、ビルドされたモジュールを完全なソースファイル用にダンプすることはできませんが、write_ec_cmd文字列をそのファイルで検索し、 https://www.kernel.org/doc/Documentation/kbuild/modules.txt にあるような手順で、外部モジュールを構築することができます。

おそらくdebugfsファイルの1つに配置して、debugfsファイルをcattして実行し、誤ってrfkillボタンを押す前にモジュールをアンロードすることをお勧めします。

これで、リストをrfkillでき、ブロックされていない自分を確認できるはずです!

2
Bryon Roché
0
serv-inc