thinkpad t60, ubuntu 18.04 LTS (xubuntu)

thinkpad t60, xubuntu desktop

Why would I buy in 2018 a computer from 2006 and install a 32 bit linux on it? The reason is simple: it has a 4x3 screen ratio which is impossible to buy today. The keyboard has the classic keys which are very good and it has a small touchpad. I use the trackpoint on all my thinkpads and therefore the smaller the touchpad the better. All these are features you can not find on any modern computer. Those are important ergonomic features. I got used to modern computers over the years with their wide screens but once you try again one of those old classic machines like the T60 you understand how much computers have degraded over the years.

A used T60 is cheap. You can get a decent machine for under 100$. It might need some repairs and cleaning but it is possible to get it back to "as good as new" condition within a few days since it is still possible to buy most spare parts. New batteries are still available on ebay. Originally I bought one reasonably looking T60 on ebay and then some cheaper ones as spare parts thinking that it would result in one very good laptop but thanks to the availability of inexpensive spare parts I was able to get all back into a good condition.

These older laptops have also something that no new laptop has: express card slots. This means you can have a pair of USB 3.0 ports even on such an old laptop.

USB3.0 express card for the T60
A USB3.0 express card for the T60


Avoiding scratches on the screen

The screen can hit the trackpoint and the middle mouse button of the t60 under pressure. In some cases even the keys can bang against the screen. This causes damaged to the anti glare coating of the screen. I recommand to put a lens cleaning cloth between screen and keyboard to avoid this.
lens cleaning cloth to protect screen
Cleaning cloth to protect the screen from beeing scratched by the trackpoint and the mouse buttons. Put it onto the keyboard before you close the screen.

When you buy your laptop on ebay then ask the seller to put a kleenex paper tissue or a paper towel between screen and keyboard before shipping the computer. I had one case where the seller packaged the laptop in a very tight box. He added too much bubble wrap such that the laptop was really squeezed and when I received the laptop I could see almost every key on the black screen. Vibration during transport caused the keys to rubb on the screen and sratch off some of the anti glare coating. Terrible. There is no way to undo this.

In any case it is a a good practice to always put a soft cloth between screen and keyboard before you close the screen. I do that with all my thinkpads. It's handy to have a lens cleaning cloth for your laptop and it protects the screen.

I have heared a number of thinkpad users asking "why does lenovo" not lower the trackpoint a bit? Well, in the thinkpad 25 anniversary edition they did that and can tell you that I don't like it. It is much more difficult to work with such a lower trackpoint. If you are a trackpoint user then then old trackpoint is the best. Such a lens cleaning cloth just costs a few cents.

Cleaning and Repair

I recommend to read the FRU replacement procedures from the hardware maintenance manual (see references at the end of this article, start reading at page 60 and onwards) before opening the laptop. It's best to clean the case with a damp cloth and/or a damp magic erraser sponge.

Second hand laptops do sometimes have rather dirty keyboards and they need to be thoroughly cleaned or replaced. The T60 has a keyboard that can be cleaned with water. To do this you follow the hardware maintenance manual to remove the keyboard form the laptop. Then you take a soft paint brush and you rinse the keyboard (without the laptop) in plain tap water (no soap or detergents) while brushing gently with the paint brush between the keys. Put it on a dry towel for a few minutes and then use a vacuum cleaner to dry it completely. A normal vacuum cleaner hose is too big and it could pull out keys or remove the trackpoint. I put a plastic funnel onto the end of the vacuum cleaner hose to reduce the nozle size to 8-10mm. Go up and down between the keys and suck out all the water. Install it and test it. Note that the keyboard should only be rinsed from the top (key side) with water. Under the keyboard is a small aluminum box which holds the electronics for the trackpoint. Avoid any water from getting in there. It's very hard to get it out again even with a vacuum cleaner and the trackpoint will mallfunction while it is wet.

If your T60 fan produces not only normal wind noise but also a "rrrrrrr" sound then it will need a drop of syntetic oil (syntetic watch or clock oil works well) and a bit of clear syntetic grease. The fan blade can be pulled out after the fan is opened and you just put a tiny amount of grease and oil onto the bearing.
t60, fan unit
t60, fan repair
T60 fan repair

Fan with swirly blades

The fan you saw in the above pictures, where I greased the bearing, has straight blades. That is: the fan blades go in the straight line (it is actually slightly curved, almost straight) from the center to the outside. There are some T60 models (and one can not know that up-front) that have different fan blades. They don't sit on an aluminum case. They come in a cheaper looking plastic case but the interesting part is that their fan blades are not straight. They have a swirly form. Have a look at the pictures below.

The fans with those swirly blades produces a little bit less wind noise especially around 3000 RPM.

t60 with a swirly fan
fan with a swirly blade
T60 fan with swirly blades, a little bit less wind noise


T60 hardware options

There are different graphic cards, screen sizes and CPUs available for the T60. If you want a computer that "meets modern standards" then I would choose a 1400 x 1050 screen and retrofit a "Intel Core 2 Duo" (replace Intel Core Duo with Intel Core 2 Duo). The "Intel Core 2 Duo" is a 64bit CPU and the T60 has cpu a socket. It is therefore possible to change CPUs. The "highest" CPU that is supported by the bios and chipset is a T7600.
Screens:
CPUs:
Memory:
Change the disk, this is the most important part:
T7600 64bit cpu
Intel Core 2 Duo T7600 (64bit cpu). This is the fastest CPU you can put into a T60. It has a 4096K L2 cache (double the size of the the standard T2400 cpu). It is by far not as fast as an i5 or i7 cpu but usable especially if you install only a 32bit linux distribution.

Installing xubuntu

I used xubuntu 18.04 LTS (32bit version): https://xubuntu.org/

Almost everything works right after the installation with some minor problems:

wifi crashes after a few hours of use, solution: Wifi Power Management off

All my T60s have the following wifi card:
03:00.0 Network controller: Intel Corporation PRO/Wireless 3945ABG [Golan] Network Connection (rev 02) Subsystem: Intel Corporation ThinkPad R60e Physical Slot: 3 Flags: bus master, fast devsel, latency 0, IRQ 31 Memory at edf00000 (32-bit, non-prefetchable) [size=4K] Capabilities: <access denied> Kernel driver in use: iwl3945 Kernel modules: iwl3945

You may see a kernel driver crash that looks as follows:
Dec 28 22:57:04 t60 kernel: [10321.664066] iwl3945 0000:03:00.0: Queue 2 stuck for 2180 ms. Dec 28 22:57:04 t60 kernel: [10321.664077] iwl3945 0000:03:00.0: On demand firmware reload Dec 28 22:57:04 t60 kernel: [10321.669435] ieee80211 phy0: Hardware restart was requested Dec 28 22:57:04 t60 kernel: [10321.717553] iwl3945 0000:03:00.0: BSM uCode verification failed at addr 0x00003800+0 (of 900), is 0xa5a5a5a2, s/b 0xf802020 Dec 28 22:57:04 t60 kernel: [10321.717561] iwl3945 0000:03:00.0: Unable to set up bootstrap uCode: -5 Dec 28 22:57:04 t60 kernel: [10321.764280] iwl3945 0000:03:00.0: BSM uCode verification failed at addr 0x00003800+0 (of 900), is 0xa5a5a5a2, s/b 0xf802020 Dec 28 22:57:04 t60 kernel: [10321.764284] iwl3945 0000:03:00.0: Unable to set up bootstrap uCode: -5 Dec 28 22:57:04 t60 kernel: [10321.810996] iwl3945 0000:03:00.0: BSM uCode verification failed at addr 0x00003800+0 (of 900), is 0xa5a5a5a2, s/b 0xf802020 Dec 28 22:57:04 t60 kernel: [10321.811000] iwl3945 0000:03:00.0: Unable to set up bootstrap uCode: -5 Dec 28 22:57:04 t60 kernel: [10321.857713] iwl3945 0000:03:00.0: BSM uCode verification failed at addr 0x00003800+0 (of 900), is 0xa5a5a5a2, s/b 0xf802020 Dec 28 22:57:04 t60 kernel: [10321.857717] iwl3945 0000:03:00.0: Unable to set up bootstrap uCode: -5 Dec 28 22:57:04 t60 kernel: [10321.904429] iwl3945 0000:03:00.0: BSM uCode verification failed at addr 0x00003800+0 (of 900), is 0xa5a5a5a2, s/b 0xf802020 Dec 28 22:57:04 t60 kernel: [10321.904433] iwl3945 0000:03:00.0: Unable to set up bootstrap uCode: -5 Dec 28 22:57:04 t60 kernel: [10321.940648] iwl3945 0000:03:00.0: Unable to initialize device after 5 attempts. Dec 28 22:57:04 t60 kernel: [10321.940652] ------------[ cut here ]------------ Dec 28 22:57:04 t60 kernel: [10321.940653] Hardware became unavailable during restart. Dec 28 22:57:04 t60 kernel: [10321.940748] WARNING: CPU: 0 PID: 1654 at /build/linux-ROjO4n/linux-4.15.0/net/mac80211/util.c:1863 ieee80211_reconfig+0x23f/0x1270 [mac80211] Dec 28 22:57:04 t60 kernel: [10321.940750] Modules linked in: nls_iso8859_1 uas usb_storage hid_generic usbhid hid coretemp pcmcia kvm arc4 snd_hda_codec_analog irqbypass snd_hda_codec_generic iwl3945 snd_hda_intel iwlegacy thinkpad_acpi input_leds nvram snd_hda_codec joydev mac80211 snd_seq_midi snd_seq_midi_event yenta_socket serio_raw pcmcia_rsrc snd_hda_core snd_rawmidi pcmcia_core cfg80211 snd_hwdep lpc_ich snd_seq snd_pcm snd_seq_device snd_timer shpchp snd soundcore mac_hid nsc_ircc(CE) irda(CE) sch_fq_codel parport_pc ppdev lp parport ip_tables x_tables autofs4 radeon i2c_algo_bit ttm drm_kms_helper syscopyarea e1000e ahci sysfillrect sysimgblt fb_sys_fops psmouse drm ptp i2c_i801 libahci pata_acpi pps_core video Dec 28 22:57:04 t60 kernel: [10321.940820] CPU: 0 PID: 1654 Comm: kworker/0:5 Tainted: G C E 4.15.0-39-generic #42-Ubuntu Dec 28 22:57:04 t60 kernel: [10321.940823] Hardware name: LENOVO 2007WV3/2007WV3, BIOS 79ETE6WW (2.26 ) 04/01/2010 Dec 28 22:57:04 t60 kernel: [10321.940853] Workqueue: events_freezable ieee80211_restart_work [mac80211] Dec 28 22:57:04 t60 kernel: [10321.940888] EIP: ieee80211_reconfig+0x23f/0x1270 [mac80211] Dec 28 22:57:04 t60 kernel: [10321.940889] EFLAGS: 00210282 CPU: 0 Dec 28 22:57:04 t60 kernel: [10321.940891] EAX: 0000002b EBX: f45c8d10 ECX: f59cb630 EDX: 00000007 Dec 28 22:57:04 t60 kernel: [10321.940893] ESI: f45c8460 EDI: f45c8460 EBP: f0ad9f20 ESP: f0ad9ee4 Dec 28 22:57:04 t60 kernel: [10321.940895] DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068 Dec 28 22:57:04 t60 kernel: [10321.940897] CR0: 80050033 CR2: b0a37000 CR3: 0de14000 CR4: 000006f0 Dec 28 22:57:04 t60 kernel: [10321.940900] Call Trace: Dec 28 22:57:04 t60 kernel: [10321.940911] ? try_to_del_timer_sync+0x45/0x70 Dec 28 22:57:04 t60 kernel: [10321.940940] ieee80211_restart_work+0x92/0xc0 [mac80211] Dec 28 22:57:04 t60 kernel: [10321.940947] process_one_work+0x1b9/0x3d0 Dec 28 22:57:04 t60 kernel: [10321.940951] worker_thread+0x37/0x420 Dec 28 22:57:04 t60 kernel: [10321.940956] kthread+0xf0/0x110 Dec 28 22:57:04 t60 kernel: [10321.940960] ? process_one_work+0x3d0/0x3d0 Dec 28 22:57:04 t60 kernel: [10321.940964] ? kthread_create_worker_on_cpu+0x20/0x20 Dec 28 22:57:04 t60 kernel: [10321.940969] ret_from_fork+0x2e/0x38 Dec 28 22:57:04 t60 kernel: [10321.940973] Code: f0 00 00 00 c6 45 e6 00 c6 87 f4 03 00 00 00 89 f8 e8 26 da fc ff 85 c0 89 45 e8 0f 84 58 01 00 00 68 d0 a4 f4 f8 e8 f1 81 16 d4 <0f> 0b 5e 89 f8 e8 47 e0 ff ff eb a6 90 8d 74 26 00 8d 87 48 04 Dec 28 22:57:04 t60 kernel: [10321.973364] ---[ end trace 871f5ebd7a6971b2 ]--- Dec 28 22:57:06 t60 NetworkManager[538]: <warn> [1546055824.3162] sup-iface[0x1a3d5a0,wls3]: connection disconnected (reason -3) Dec 28 22:57:06 t60 wpa_supplicant[570]: wls3: CTRL-EVENT-DISCONNECTED bssid=c0:c1:c0:0d:f7:64 reason=3 locally_generated=1 Dec 28 22:57:06 t60 whoopsie[765]: [22:57:04] offline Dec 28 22:57:06 t60 NetworkManager[538]: <info> [1546055824.3322] manager: NetworkManager state is now CONNECTED_SITE Dec 28 22:57:06 t60 dhclient[2552]: receive_packet failed on wls3: Network is down Dec 28 22:57:06 t60 NetworkManager[538]: <info> [1546055824.3469] device (wls3): supplicant interface state: completed -> disabled Dec 28 22:57:06 t60 avahi-daemon[546]: Interface wls3.IPv4 no longer relevant for mDNS. Dec 28 22:57:06 t60 systemd[1]: Starting Network Manager Script Dispatcher Service... Dec 28 22:57:06 t60 avahi-daemon[546]: Leaving mDNS multicast group on interface wls3.IPv4 with address 10.0.0.137. Dec 28 22:57:06 t60 systemd[1]: Started Network Manager Script Dispatcher Service. Dec 28 22:57:06 t60 avahi-daemon[546]: Withdrawing address record for 10.0.0.137 on wls3. Dec 28 22:57:06 t60 dbus-daemon[514]: [system] Activating via systemd: service name='org.freedesktop.nm_dispatcher' unit='dbus-org.freedesktop.nm-dispatcher.service' requested by ':1.10' (uid=0 pid=538 comm="/usr/sbin/NetworkManager --no-daemon " label="unconfined") Dec 28 22:57:06 t60 dbus-daemon[514]: [system] Successfully activated service 'org.freedesktop.nm_dispatcher' Dec 28 22:57:06 t60 nm-dispatcher: req:1 'connectivity-change': new request (1 scripts) Dec 28 22:57:06 t60 nm-dispatcher: req:1 'connectivity-change': start running ordered scripts... Dec 28 23:02:25 t60 NetworkManager[538]: <info> [1546056145.0625] manager: rfkill: WiFi hardware radio set disabled Dec 28 23:02:25 t60 wpa_supplicant[570]: rfkill: WLAN soft blocked Dec 28 23:02:25 t60 whoopsie[765]: [23:02:25] Cannot reach: https://daisy.ubuntu.com Dec 28 23:02:25 t60 NetworkManager[538]: <info> [1546056145.0626] device (wls3): state change: activated -> unavailable (reason 'none', sys-iface-state: 'managed') Dec 28 23:02:25 t60 systemd[1]: Starting Load/Save RF Kill Switch Status... Dec 28 23:02:25 t60 systemd[1]: Started Load/Save RF Kill Switch Status. Dec 28 23:02:25 t60 NetworkManager[538]: <info> [1546056145.0859] dhcp4 (wls3): canceled DHCP transaction, DHCP client pid 2552 Dec 28 23:02:25 t60 NetworkManager[538]: <info> [1546056145.0860] dhcp4 (wls3): state changed bound -> done Dec 28 23:02:25 t60 NetworkManager[538]: <info> [1546056145.0887] manager: NetworkManager state is now CONNECTED_LOCAL Dec 28 23:02:25 t60 NetworkManager[538]: <info> [1546056145.0895] manager: NetworkManager state is now DISCONNECTED Dec 28 23:02:25 t60 dbus-daemon[514]: [system] Activating via systemd: service name='org.freedesktop.nm_dispatcher' unit='dbus-org.freedesktop.nm-dispatcher.service' requested by ':1.10' (uid=0 pid=538 comm="/usr/sbin/NetworkManager --no-daemon " label="unconfined") Dec 28 23:02:25 t60 NetworkManager[538]: <info> [1546056145.1188] audit: op="radio-control" arg="wireless-enabled:0" pid=1095 uid=1000 result="success" Dec 28 23:02:25 t60 NetworkManager[538]: <info> [1546056145.1196] manager: rfkill: WiFi now disabled by radio killswitch Dec 28 23:02:25 t60 systemd[1]: Starting Network Manager Script Dispatcher Service... Dec 28 23:02:25 t60 wpa_supplicant[570]: nl80211: deinit ifname=wls3 disabled_11b_rates=0 Dec 28 23:02:25 t60 dbus-daemon[514]: [system] Successfully activated service 'org.freedesktop.nm_dispatcher' Dec 28 23:02:25 t60 nm-dispatcher: req:1 'down' [wls3]: new request (1 scripts) Dec 28 23:02:25 t60 nm-dispatcher: req:1 'down' [wls3]: start running ordered scripts... Dec 28 23:02:25 t60 systemd[1]: Started Network Manager Script Dispatcher Service. Dec 28 23:02:29 t60 NetworkManager[538]: <info> [1546056149.7730] manager: rfkill: WiFi hardware radio set enabled Dec 28 23:02:29 t60 kernel: [10647.463477] iwl3945 0000:03:00.0: BSM uCode verification failed at addr 0x00003800+0 (of 900), is 0xa5a5a5a2, s/b 0xf802020 Dec 28 23:02:29 t60 kernel: [10647.463485] iwl3945 0000:03:00.0: Unable to set up bootstrap uCode: -5 Dec 28 23:02:29 t60 kernel: [10647.510219] iwl3945 0000:03:00.0: BSM uCode verification failed at addr 0x00003800+0 (of 900), is 0xa5a5a5a2, s/b 0xf802020 Dec 28 23:02:29 t60 kernel: [10647.510224] iwl3945 0000:03:00.0: Unable to set up bootstrap uCode: -5 Dec 28 23:02:29 t60 kernel: [10647.556946] iwl3945 0000:03:00.0: BSM uCode verification failed at addr 0x00003800+0 (of 900), is 0xa5a5a5a2, s/b 0xf802020 Dec 28 23:02:29 t60 kernel: [10647.556950] iwl3945 0000:03:00.0: Unable to set up bootstrap uCode: -5 Dec 28 23:02:29 t60 kernel: [10647.603665] iwl3945 0000:03:00.0: BSM uCode verification failed at addr 0x00003800+0 (of 900), is 0xa5a5a5a2, s/b 0xf802020 Dec 28 23:02:29 t60 kernel: [10647.603669] iwl3945 0000:03:00.0: Unable to set up bootstrap uCode: -5 Dec 28 23:02:30 t60 kernel: [10647.650396] iwl3945 0000:03:00.0: BSM uCode verification failed at addr 0x00003800+0 (of 900), is 0xa5a5a5a2, s/b 0xf802020 Dec 28 23:02:30 t60 kernel: [10647.650400] iwl3945 0000:03:00.0: Unable to set up bootstrap uCode: -5 Dec 28 23:02:30 t60 NetworkManager[538]: <warn> [1546056150.0447] platform-linux: do-change-link[4]: failure changing link: failure 5 (Input/output error)

You may also see the following message during startup:
[ 23.839742] iwl3945 0000:03:00.0: Enabling power save might cause firmware crashes
Check if power management is on. If so then that is the problem. Set it to off.
$ iwconfig wls3 wls3 IEEE 802.11 ESSID:"sansfil" Mode:Managed Frequency:2.422 GHz Access Point: C0:C1:C0:0D:F7:64 Bit Rate=54 Mb/s Tx-Power=15 dBm Retry short limit:7 RTS thr:off Fragment thr:off Power Management:on Link Quality=70/70 Signal level=-29 dBm Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:29 Missed beacon:0 $ iwconfig wls3 power off
If you are using NetworkManager then you need to make this change in the following config file to have it set permanently:
/etc/NetworkManager/conf.d/default-wifi-powersave-on.conf change the parameter wifi.powersave from 3 to 2

Sound buttons work but they don't activate the on display notifications showing the volume

Create a file called /etc/rc.local, make it executable and then reboot the laptop. ubuntu 18.04 uses systemd but for backward compatibility is has a feature that creates automatically a rc.local systemd service if the presence of an executable /etc/rc.local is detected. Add the following in /etc/rc.local:
#!/bin/sh if [ -r /sys/devices/platform/thinkpad_acpi/hotkey_all_mask ]; then echo "$0: cp /sys/devices/platform/thinkpad_acpi/hotkey_all_mask /sys/devices/platform/thinkpad_acpi/hotkey_mask" /bin/cp /sys/devices/platform/thinkpad_acpi/hotkey_all_mask /sys/devices/platform/thinkpad_acpi/hotkey_mask fi

Improving CPU performances by removing bug fixes and workarounds

Most CPU related bugs are only important for shared computers where un-trusted users can execute software. A personal laptop that is just used by one person is not an environment where this would be a concern. It makes sense to disable the workarounds for meltdown and spectre (and other bugs) in favor for better performance especially on older machines where CPU speed is a concern. It is a noticable improvement when you disable these CPU bug mitigations.

The performance goes up and the CPU temperature goes down by about 1'C.


# this is /etc/default/grub
# run 'update-grub' after editing this file.

GRUB_DEFAULT=0
# disable the default ubuntu hidden grub menus and splash screen:
#GRUB_TIMEOUT_STYLE=hidden
#GRUB_TIMEOUT=10
GRUB_TIMEOUT_STYLE=menu
GRUB_TIMEOUT=3
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
#GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
# disable ipV6 and CPU bug fixes in favor of better performance:
GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1 nopti nospectre_v1 nospectre_v2 l1tf=off nospec_store_bypass_disable"
# see https://www.kernel.org/doc/html/latest/admin-guide/kernel-parameters.html 
# for documentation about the kernel parameters.
GRUB_CMDLINE_LINUX=""
# ---- end /etc/default/grub

The Ubuntu version that I am using runs Kernel version 4.15.0-43-generic.
The command "ls /sys/devices/system/cpu/vulnerabilities/" will show you the bugs that your CPU has. It will show "l1tf meltdown spec_store_bypass spectre_v1 spectre_v2" in the case of the T60 thinkpad CPUs.

Useful scripts

Here are some useful scripts that I use for monitoring fanspeed and temperature on the T60:
t60temp.sh:
#!/bin/sh
if [ -n "$1" -a "$1" = "-h" ]; then
cat << EOH
t60temp.sh -- show /proc/acpi/ibm/thermal

Usage: t60temp.sh [-h]

t60temp.sh prints the temperatures from /proc/acpi/ibm/thermal 
in degree celsius with lables.
EOH
exit 0
fi
echo "            	C  A  P  G  B  -  B"
echo "            	P  P  C  P  A  -  A"
echo "            	U  S  M  U  T  -  T"
cat /proc/acpi/ibm/thermal  | sed 's/-128/--/g'


battery_status.sh:
#!/bin/sh 
echo "external removable battery:"
cat /sys/class/power_supply/BAT0/uevent | egrep -v "POWER_SUPPLY_ENERGY|POWER_SUPPLY_MANUFACTURER|POWER_SUPPLY_SERIAL_NUMBER"

cputemp.sh:
#!/bin/sh
if [ -n "$1" -a "$1" = "-h" ]; then
cat << EOH
cputemp.sh -- show /sys/class/thermal/thermal_zone0/temp

Usage: cputemp.sh [-h]

cputemp.sh prints the current CPU temperature in degree celsius.
EOH
exit 0
fi
cat /sys/class/thermal/thermal_zone0/temp | awk '{print $1/1000 " C"}'

fanspeed.sh:
#!/bin/sh
if [ -n "$1" -a "$1" = "-h" ]; then
cat << EOH
fanspeed.sh -- show /proc/acpi/ibm/fan

Usage: fanspeed.sh [-h]

EOH
exit 0
fi
cat /proc/acpi/ibm/fan

ATI Radeon graphics card gets hot

You can add the following lines to /etc/rc.local (you created that file aready for the sound buttons, see above).
# if you have: 01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] RV515/M52 [Mobility Radeon X1300]
# and your laptop gets hot then try this:
if [ -f  /sys/class/drm/card0/device/power_profile ]; then
        echo "$0: echo low > /sys/class/drm/card0/device/power_profile"
        echo low > /sys/class/drm/card0/device/power_profile
fi
This works for me on the 1024x768 display and lowers the temperature by about 4'C. On 1400x1050 displays it causes stranges lines and therefore you can not use it on the SXGA+ displays. I use those old T60s anyhow for programming and web editing. Therefore I don't need much graphics performance at all.

Mouse cursor lost after suspend to RAM

This is an unsolved problem. If you suspend the computer to RAM and you wake it up by opening the the screen then the mouse cursor is no longer visible. You can fix it by typing "crtl-alt-f1" and once you are at the normal linux console then just press "alt-f7" to get back to the graphical user interface.

I have found reports of similar problems using google but they are always related to a screensaver. I don't use a screensaver. It has in my opinion something to do with the fact that the display is not fully on yet when the computer wakes up since the lid is just moving up. If you just do "fn-f4" to suspend and then "fn" to wake up without closing the screen then this fault does not happen. In any case there is a workaround with "crtl-alt-f1" and "alt-f7" and it is not too bad.

Enable dns caching for a faster web browsing exprience

Enable dns caching (if you are using network manager and dnsmasq): DNS name resolution is often what causes "the internet" to appear "slow" and a good cache can go a long way in speeding things up.

For more information on this subject see http://tuxgraphics.org/npa/ubuntu-dns-caching/.
vi /etc/NetworkManager/dnsmasq.d/cache.conf

and put inside:

cache-size=1000
neg-ttl=900

After that run "systemctl restart network-manager" or 
just restart the computer.


Disable close button on xfce4-terminal

xfce-terminal is a great terminal but it has two disastrous default settings that must always be changed. It is especially critical if you work on a laptop with a trackpoint. It is enough to give a new tab focus when you just left click on the tab. Now you can type in the tab but if you then middle click to paste then you will close the whole shell because your mouse cursor is still over the tab at the top and not inside the window. The other problem is if you switch quickly between many tabs then you will eventually hit the "x" on the tab to close it.
the close button the xfce-terminal
close button the xfce-terminal, dangerous

To remove the close button and disable close on middle click make sure that the following settings are FALSE:
vi ~/.config/xfce4/terminal/terminalrc
....
MiscTabCloseButtons=FALSE
MiscTabCloseMiddleClick=FALSE
....


Disable auto-maximize when dragging window to top of screen in XFCE

XFCE 4 automatically maximizes windows when you drag it to the top of the screen. To disable this you can un-check the Window Manager Tweaks setting called "Automatically tile windows when moving toward the screen edge".
un-check: Automatically tile windows when moving toward the screen edge
remove the check box from "Automatically tile windows when moving toward the screen edge"
Settings Manager > Window Manager Tweaks > Accessibility > Automatically tile windows when moving toward the screen edge


Remove useless services

The simplicity of installing xubuntu has a downside, it's not fine-tuned. Sometimes there are useless things installed either as a dependency to some other package or directly.

It's useful to run once in a while "systemctl list-unit-files" and "systemd-analyze blame" to see if there is anything started that does not make any sense.

A common case of such a service is the avahi-daemon which could be used to discover hosts in the local network (zeroconf networking) but for a lot of people this is completely useless. Just prevent it from starting:

# systemctl mask avahi-daemon.socket
Created symlink /etc/systemd/system/avahi-daemon.socket -> /dev/null.
# systemctl mask avahi-daemon.service 
Created symlink /etc/systemd/system/avahi-daemon.service -> /dev/null.

Tune firefox

The web browser has become one of the most important applications and it is important to unconfigure "malware like" features that establish a lot of unwanted connections and slow the system down.

Go to a very simple add free web page such as this page and then run (run it as root in shell):
netstat -anp | more

It's horrible what you see. Firefox establishes dozens of connections to ip addresses that resolve to sub-domains of 1e100.net

This is google "safe browsing" spying on everything you do and I can highly recommend to eradicate that from your web browser. Go to preferences ->Privacy & Security->Block dangerous and deceptive content Uncheck that box.

You can as well go to about:config and set the following to false:
browser.safebrowsing.malware.enabled=false
browser.safebrowsing.phishing.enabled=false
In addition you will also have to set the following in about:config since you can not set it via preferences. Firefox does always contact google safebrowsing even if you disable it in the preferences. You have to go to about:config to get rid of everything:

disable firefox safebrowsing
disable firefox safebrowsing
disable firefox safebrowsing


Next disable anything with automatic software update and then set the firefox captive portal service to false in about:config
network.captive-portal-service.enabled=false

Videos that play automatically are a big problem and it is highly recommended to disable this. Go to about:config and then set
media.autoplay.default=2
This will cause firefox to ask if videos are allowed to start playing automatically. It will block video autoplay by default and ask for your permission.

There is also a very important add-on that every browser needs: "Nuke Anything Enhanced". It allows you to "x" anything on any web page such a banners or overlays that obstruct the view.
https://addons.mozilla.org/en-US/firefox/addon/nuke-anything-enhanced/

More is not always better. Firefox has by default the following connection limits:
network.http.max-connections=900
network.websocket.max-connections=200
I cut them down to 30 and 10 respectively.

Firefox does a DNS lookup on every single URL in the current page to make loading of the next page faster. The ideas is that you might go to the next page by clicking on one of those URLs in the current page. If you have a fast DNS server (like e.g 1.1.1.1) then that is completely unnecessary and will only allow for the finger-printing of the page that you are looking at and generate a lot of DNS traffic. Always disable DNS pre-fetching!
network.dns.disablePrefetch=true
I do as well disable ipv6 look-up since I don't use IPv6 in my network:
network.dns.disableIPv6=true



Update March 2019: I have written a separate more comprehensive article about firefox settings: http://tuxgraphics.org/npa/firefox-tuning/

IBM/Lenovo documentation




This page was written by Guido Socher