WiFi problems after waking up from sleep, Ubuntu 16.10

After installing Ubuntu 16.10 I occasionally had problems with WiFi after waking up from sleep.

But of course there’s a workaround (credit to Joakim Koed on askubuntu.com and the solution).

sudo bash -c 'cat >/etc/systemd/system/wake-up.service <<EOF
[Unit]
Description=Restart networkmanager at resume
After=suspend.target
After=hibernate.target
After=hybrid-sleep.target

[Service]
Type=oneshot
ExecStart=/bin/systemctl restart network-manager.service

[Install]
WantedBy=suspend.target
WantedBy=hibernate.target
WantedBy=hybrid-sleep.target
EOF'
sudo systemctl enable wake-up.service

Measure WiFi signal strength

When installing a wireless network in our cabins, I had to make some optimizations, like buying bigger antennas. To verify that the signal got better at some key areas I went around and checked the signal, with this little script:

Then I imported the result in Google Sheets and drew a really simple blueprint over the cabins and plotted the measured areas to see how good the signal was.

Packet history in Ubuntu

Trying to figure out what packages has been changed since a specific date. A quick hack.

package_history() {
    local since="${1}"
    local action="${2:-install}"
    action=${action,,}
    action=${action^}

    [[ -z "${since}" ]] && { echo "Need a valid date as first argument"; exit -1; }

    sed -n '/^Start-Date: '"${since}"' /,$p' /var/log/apt/history.log | awk '/Start-Date:/ || /'"${action}"':/' | sed -r 's|\),|\)\n|g; s|('"${action}"': )|\1\n |'
}

Examples, if you want to know all packages installed since 2016-05-17:
package_history "2016-05-17"

If you want to know all packages removed since 2016-05-09:
package_history "2016-05-17" remove

Hibernate in Ubuntu 14.04, with iwlwifi

Update: After a lot of troubleshooting and testing different combinations of my kernel parameters; I conclude that it works a lot better when leaving pcie_aspm=force (think I got it from an Arch wiki?), and also never resume when docked if the computer was hibernated on battery. This seems to be working even with the linux-image-generic-lts-xenial kernel. You can check this pastebin with the results and combination that I’ve tested.

To enable hibernate in the menu, create /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla with the following content:

[Re-enable hibernate by default in upower]
Identity=unix-user:*
Action=org.freedesktop.upower.hibernate
ResultActive=yes

[Re-enable hibernate by default in logind]
Identity=unix-user:*
Action=org.freedesktop.login1.hibernate
ResultActive=yes

[Re-enable hibernate for multiple users by default in logind]
Identity=unix-user:*
Action=org.freedesktop.login1.hibernate-multiple-sessions
ResultActive=yes

Update /etc/default/grub and add RESUME parameter set to your swap partition in GRUB_CMDLINE_LINUX_DEFAULT. Example:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash i915.enable_fbc=1 i915.enable_rc6=7"

Don’t forget to run sudo update-grub2.

Check if iwlwifi has any dependencies:

$ lsmod | egrep "^iwlwifi"
iwlwifi               196608  1 iwlmvm

Add, in this case, iwlwifi and iwlmvm to /etc/pm/config.d/modules:

SUSPEND_MODULES="iwlmvm iwlwifi"

Create /etc/pm/sleep.d/99_wpa_supplicant:

#!/bin/sh

case "$1" in
resume|thaw)
/usr/bin/pkill wpa_supplicant
;;
esac

Don’t forget to make it executable, chmod +x /etc/pm/sleep.d/99_wpa_supplicant.

Killing wpa_supplicant on resume and thaw is needed due to bug #1311257.

And lastly, if you have TLP, make sure to restore previous device state on startup:

$ egrep "^RESTORE_" /etc/default/tlp
RESTORE_DEVICE_STATE_ON_STARTUP=1

Note: I had hibernate working perfect, but then I upgraded to linux-image-generic-lts-xenial which caused KernelOops on every thawn. After reverting back it worked great again. I’m guessing the reason is that the gfx stack (xserver-xorg-video-intel-xenial etc.) isn’t available in 14.04 (yet?).

Build i3-gaps in Docker

Automated way

So, the very automated way:

git clone git@github.com:mgor/docker-ubuntu-i3-gaps-builder.git
cd docker-ubuntu-i3-gaps-builder/
make

Packages available in packages/.

Build environment

First, get the build environment and start it:

git clone git@github.com:mgor/docker-ubuntu-pkg-builder.git
cd docker-ubuntu-pkg-builder
make

Dependencies

Install the needed dependencies:

apt update
apt install libxcb1-dev libxcb-keysyms1-dev \
libpango1.0-dev libxcb-util0-dev libxcb-icccm4-dev \
libyajl-dev libstartup-notification0-dev \
libxcb-randr0-dev libev-dev libxcb-cursor-dev \
libxcb-xinerama0-dev libxcb-xkb-dev libxkbcommon-dev \
libxkbcommon-x11-dev
apt-get build-dep i3

Build

Get i3-gaps from github[0].

git clone https://www.github.com/Airblader/i3 i3-gaps
cd i3-gaps

If you want to run on the stable branch:

git checkout gaps
git pull

Build the packages:

debuild -i -us -uc -b

If successful, the packages will be in ../. Transfer them to your host and install.