Wifi Fn Key on Dell Laptop not working

Hi,

so I installed OpenSUSE 13.2 on my new Dell Precision M3800. The laptop came preinstalled with a special Dell Ubuntu flavour, which seems to have included a few Dell specific packages and some firmware. When I played around on Ubuntu, all Fn keys were working fine, so I switched off the Wifi to save power in battery mode. Apparently, I forgot to turn it back on before installing Suse (and overwriting the Ubuntu partitions). Now my Wifi is “hardware disabled” and I can’t turn it back on with the Fn key in Suse. However, the other Fn keys work fine (e.g. screen brightness). My window manager is Xfce, btw.

rfkill says:
0: phy0: Wireless LAN
Soft blocked: no
Hard blocked: yes

xev says:
when pressing Fn+F9 (the “search key”):
KeyRelease event, serial 37, synthetic NO, window 0x5600001,
root 0xde, subw 0x0, time 6540787, (-364,7), root:(507,449),
state 0x0, keycode 225 (keysym 0x1008ff1b, XF86Search), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False

when pressing Fn+PrintScreen (the offending Wifi key):
KeyRelease event, serial 37, synthetic NO, window 0x5600001,
root 0xde, subw 0x0, time 6562602, (-265,-43), root:(606,399),
state 0x0, keycode 248 (keysym 0x0, NoSymbol), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False

lspci says this about the Wifi card:

Slot: 06:00.0
Class: Network controller
Vendor: Intel Corporation
Device: Wireless 7260
SVendor: Intel Corporation
SDevice: Dual Band Wireless-AC 7260
Rev: bb

I’d like to keep my Suse and not go back to Ubuntu, but obviously I need Wifi working on that Laptop. So what can I do to be able to switch Wifi on and off with the Fn key?
Do I have to somehow associate keycode 248 with another symbol than NoSymbol - and if so: which symbol and how do I do that?
Or do I need to dig some firmware module out of my Dell Ubuntu backup? If so: what should I be looking for and where would I install it?

Btw, I already checked the BIOS, but Wifi can’t be reenabled there :frowning:

This issue is reported by Ubuntu users too

http://askubuntu.com/questions/606392/dell-precision-m3800-wifi-hardware-disabled

Just a thought (and I could well be wrong) - I’m wondering if the ‘dell-wmi’ module is not working correctly for this model.

The developer may be able to provide/fix the necessary hotkey support

modinfo dell-wmi
filename:       /lib/modules/3.11.10-29-desktop/kernel/drivers/platform/x86/dell-wmi.ko
alias:          wmi:9DBB5994-A997-11DA-B012-B622A1EF5492
license:        GPL
description:    Dell laptop WMI hotkeys driver
author:         Matthew Garrett <mjg@redhat.com>
srcversion:     D28AE8F74692E05BD33E123
depends:        wmi,sparse-keymap
intree:         Y
vermagic:       3.11.10-29-desktop SMP preempt mod_unload modversions 

A long shot, but in this askubuntu thread, a user mentions that they had to shutdown their laptop, disconnect the power supply, and remove the battery (different model but same problem).

Try shutting down (if not already off), disconnecting the power, remove battery (if it is a laptop), press power a few times to release stored energy, reinsert battery (if it is a laptop), reconnect AC power. Turn on computer. Worked for me.

Hi,

and thanks a lot for investigating :slight_smile:

I tried that (and boy, removing the battery is certainly not envisioned as an everyday activity by Dell) - but no luck. Wifi is still disabled.

Yeah, I saw that as well - but since the key did work on the pre-installed Ubuntu I’m hoping there’s some kind of patch or modification that can be made to fix this.

Just a thought (and I could well be wrong) - I’m wondering if the ‘dell-wmi’ module is not working correctly for this model.

Hm, yes, the module is used on my Suse (but with a newer kernel):

filename: /lib/modules/3.16.7-24-desktop/kernel/drivers/platform/x86/dell-wmi.ko
alias: wmi:9DBB5994-A997-11DA-B012-B622A1EF5492
license: GPL
description: Dell laptop WMI hotkeys driver
author: Matthew Garrett <mjg@redhat.com>
srcversion: 25903BF68FE916DB1314466
depends: wmi,sparse-keymap
intree: Y
vermagic: 3.16.7-24-desktop SMP preempt mod_unload modversions
…]

Searching for dell-wmi lead me to this link https://bbs.archlinux.org/viewtopic.php?id=201422
Maybe udev rules might help in my case as well? I’m just not very familiar with them and how to arrive at the correct rules.

I followed the steps in that post to get some idea of what’s going on on my system.

xmodmap -pke says:


...
keycode 232 = XF86MonBrightnessDown NoSymbol XF86MonBrightnessDown
keycode 233 = XF86MonBrightnessUp NoSymbol XF86MonBrightnessUp
keycode 234 = XF86AudioMedia NoSymbol XF86AudioMedia
keycode 235 = XF86Display NoSymbol XF86Display
keycode 236 = XF86KbdLightOnOff NoSymbol XF86KbdLightOnOff
keycode 237 = XF86KbdBrightnessDown NoSymbol XF86KbdBrightnessDown
keycode 238 = XF86KbdBrightnessUp NoSymbol XF86KbdBrightnessUp
keycode 239 = XF86Send NoSymbol XF86Send
keycode 240 = XF86Reply NoSymbol XF86Reply
keycode 241 = XF86MailForward NoSymbol XF86MailForward
keycode 242 = XF86Save NoSymbol XF86Save
keycode 243 = XF86Documents NoSymbol XF86Documents
keycode 244 = XF86Battery NoSymbol XF86Battery
keycode 245 = XF86Bluetooth NoSymbol XF86Bluetooth
keycode 246 = XF86WLAN NoSymbol XF86WLAN
keycode 247 =
keycode 248 =
keycode 249 =
keycode 250 =
keycode 251 =
keycode 252 =
keycode 253 =
keycode 254 =
keycode 255 =

So it seems that currently my system expects the Wifi key to be keycode 246 while in reality it is keycode 248. Maybe it would be enough to change that?

grep -i “dell” /var/log/Xorg.0.log
yields


    24.240] (II) config/udev: Adding input device Dell WMI hotkeys (/dev/input/event15)
    24.240] (**) Dell WMI hotkeys: Applying InputClass "evdev keyboard catchall"
    24.240] (**) Dell WMI hotkeys: Applying InputClass "system-keyboard"
    24.240] (**) Dell WMI hotkeys: Applying InputClass "evdev keyboard catchall"
    24.240] (II) Using input driver 'evdev' for 'Dell WMI hotkeys'
    24.240] (**) Dell WMI hotkeys: always reports core events
    24.240] (**) evdev: Dell WMI hotkeys: Device: "/dev/input/event15"
    24.240] (--) evdev: Dell WMI hotkeys: Vendor 0 Product 0
    24.240] (--) evdev: Dell WMI hotkeys: Found keys
    24.240] (II) evdev: Dell WMI hotkeys: Configuring as keyboard
    24.240] (II) XINPUT: Adding extended input device "Dell WMI hotkeys" (type: KEYBOARD, id 15)

udevadm info /dev/input/by-path/platform-i8042-serio-0-event-kbd
yields


P: /devices/platform/i8042/serio0/input/input0/event0
N: input/event0
S: input/by-path/platform-i8042-serio-0-event-kbd
E: DEVLINKS=/dev/input/by-path/platform-i8042-serio-0-event-kbd
E: DEVNAME=/dev/input/event0
E: DEVPATH=/devices/platform/i8042/serio0/input/input0/event0
E: ID_INPUT=1
E: ID_INPUT_KEY=1
E: ID_INPUT_KEYBOARD=1
E: ID_PATH=platform-i8042-serio-0
E: ID_PATH_TAG=platform-i8042-serio-0
E: ID_SERIAL=noserial
E: KEYBOARD_KEY_81=playpause
E: KEYBOARD_KEY_82=stopcd
E: KEYBOARD_KEY_83=previoussong
E: KEYBOARD_KEY_84=nextsong
E: KEYBOARD_KEY_85=brightnessdown
E: KEYBOARD_KEY_86=brightnessup
E: KEYBOARD_KEY_87=battery
E: KEYBOARD_KEY_88=unknown
E: KEYBOARD_KEY_89=ejectclosecd
E: KEYBOARD_KEY_8F=switchvideomode
E: KEYBOARD_KEY_8a=suspend
E: KEYBOARD_KEY_8b=switchvideomode
E: KEYBOARD_KEY_8c=unknown
E: KEYBOARD_KEY_90=previoussong
E: KEYBOARD_KEY_91=prog1
E: KEYBOARD_KEY_92=media
E: KEYBOARD_KEY_93=unknown
E: KEYBOARD_KEY_95=camera
E: KEYBOARD_KEY_97=email
E: KEYBOARD_KEY_98=f21
E: KEYBOARD_KEY_99=nextsong
E: KEYBOARD_KEY_9a=setup
E: KEYBOARD_KEY_9b=switchvideomode
E: KEYBOARD_KEY_9e=f21
E: KEYBOARD_KEY_a2=playpause
E: KEYBOARD_KEY_a4=stopcd
E: KEYBOARD_KEY_d8=screenlock
E: KEYBOARD_KEY_d9=f21
E: KEYBOARD_KEY_ed=media
E: MAJOR=13
E: MINOR=64
E: SUBSYSTEM=input
E: USEC_INITIALIZED=229608

and
evtest /dev/input/event15
yields


Input driver version is 1.0.1
Input device ID: bus 0x19 vendor 0x0 product 0x0 version 0x0
Input device name: "Dell WMI hotkeys"
Supported events:
  Event type 0 (EV_SYN)
  Event type 1 (EV_KEY)
    Event code 148 (KEY_PROG1)
    Event code 149 (KEY_PROG2)
    Event code 161 (KEY_EJECTCD)
    Event code 224 (KEY_BRIGHTNESSDOWN)
    Event code 225 (KEY_BRIGHTNESSUP)
    Event code 227 (KEY_SWITCHVIDEOMODE)
    Event code 236 (KEY_BATTERY)
    Event code 238 (KEY_WLAN)
    Event code 240 (KEY_UNKNOWN)
  Event type 4 (EV_MSC)
    Event code 4 (MSC_SCAN)
Properties:
Testing ... (interrupt to exit)

Seems the evtest event codes don’t correspond to xev key codes.

I’m still trying to figure out how to put it all together - any hints are appreciated :slight_smile:

This is worth a shot IMHO. Try adding the following boot parameter to grub

acpi_osi="!Windows 2012

This might work if it is the BIOS which is ignoring the ‘wifi’ Fn key, and hopefully will fool it into thinking Windows OS is installed.

Based on the comments in this thread it might to be added like this instead

acpi_osi=\"!Windows 2012\"

If none of these things work, perhaps re-flashing the BIOS might work? (Warning:Not to be considered lightly.)

Take the time to read the following methods:
http://giantdorks.org/alain/how-to-update-dell-bios-firmware-regardless-of-the-os-linux-unix-whatever/
https://wiki.ubuntu.com/DellBIOS

BIOS update here:
http://www.dell.com/support/home/us/en/19/product-support/product/precision-m3800-workstation/drivers

Added it to the optional kernel parameters with the Yast grub module and rebooted - but Wifi key is still not working.

According to
dmidecode -s bios-version
my bios is a the latest version so I wouldn’t expect much from upgrading. Or did you have something else in mind?

I also tried my hand at creating an udev rule to solve my problem but it’s being ignored by the system so far.
I’ve created /etc/udev/hwdb.d/99-custom-keyboard.hwdb
with


keyboard:dmi:*
 KEYBOARD_KEY_88=wlan

and reloaded the rules with
udevadm --debug hwdb --update
udevadm trigger

but
udevadm info /dev/input/by-path/platform-i8042-serio-0-event-kbd
still shows
E: KEYBOARD_KEY_88=unknown

My hope is that maybe re-flashing the BIOS might reinstate the wireless card by reactivating it.

I guess you could always reinstall Ubuntu 14.04 on this machine, and download the ‘Precision_M3800_A08.fish.tar.gz’ from Dell

http://www.dell.com/support/home/uk/en/ukbsdt1/product-support/product/precision-m3800-workstation/drivers

That should allow you to re-enable the wireless card again.

Some useful instructions on doing this here
http://www.dell.com/support/home/uk/en/ukbsdt1/Drivers/DriversDetails?driverId=VW84F&fileId=3458728014&osCode=UB14A&productCode=precision-m3800-workstation&languageCode=EN&categoryId=CS

Yeah, I was afraid I might have to do that :frowning:

Some useful instructions on doing this here
http://www.dell.com/support/home/uk/en/ukbsdt1/Drivers/DriversDetails?driverId=VW84F&fileId=3458728014&osCode=UB14A&productCode=precision-m3800-workstation&languageCode=EN&categoryId=CS

So I finally installed ubuntu-14.04.3-desktop-amd64 from a live usb onto a usb stick attached to my laptop (so that I didn’t have to get rid of my Suse install on the hard drive). Then on that Ubuntu install, I installed the Dell Recovery tool as recommended in your link and downloaded the tar.gz. Turns out the Recovery Tool doesn’t like that tar (on my system) - so I had to install the Ubuntu debs manually:
Unpack the tar
Go into the “kernel” subdir
Install all debs there with “sudo dpkg -i *.deb”
Run “sudo apt-get -f install” to fetch missing dependencies
Run “sudo dpkg -i *.deb” again.
Change grub to boot the old kernel just installed (edit /boot/grub/grub.cfg and run sudo update-grub)
Reboot to Ubuntu.
Go into “installer” subdir of the driver package and run “sudo dpkg -i *.deb”
Run “sudo apt-get -f install” to fetch missing dependencies.
Run “sudo dpkg -i *.deb” again.
Go into debs subdir of the driver package and run “sudo dpkg -i *.deb”
Run “sudo apt-get -f install” to fetch missing dependencies. Realize some packages just won’t install and remove.
Run “sudo dpkg -i *.deb” again.
(and possibly some other stuff that I lost track of)
Reboot again.

At this point I could switch wifi on/off with Fn+PrintScreen :slight_smile:

So the wifi works on Suse now as well - but I can’t switch it on/off.

(https://bugzilla.suse.com/show_bug.cgi?id=942876)

So it was reasonably simple then… :stuck_out_tongue:

There are a bunch of deb packages in that tarball. It would be nice to know what provides the necessary support for that wireless hot key.

…and at least you now have a means to re-enable the wireless card should you ever need it. :slight_smile:

Oh, I would definitely recommend it for any Windows user who wants to switch to Linux… it’s an illuminative exercise :stuck_out_tongue_winking_eye:

There are a bunch of deb packages in that tarball. It would be nice to know what provides the necessary support for that wireless hot key.

It sure would be. I’ve started to replace the Dell packages with the default Ubuntu ones bit by bit to figure out which one contains the fix. It’s a bid tedious, though :wink: Let’s see if I can narrow it down.