TECHTIP: Centos 7 on Asus UX305 – USB-Ethernet Realtek R8153

As mentioned in my earlier posts, I found an old 10/100Mbps USB-Ethernet that happened to be lying around which allowed me to update and install the required wireless drive.

This 10/100Mbps USB-Ethernet adapter was never going to be sufficient for my day-to-day work. As such, I bought a 10/100/1000Mbps USB-Ethernet that came with a Realtek R8153 chip. Plugged it into the Asus UX305 and unfortunately, it did not work as expected.

dmesg was showing errors and reported saying “Link is not ready”. This is even though I had the ethernet cable firmly plugged in. There were no LED indicators on the adapter, hence I was unable to tell anything apart from the error shown using dmesg.

Googled around for pointer and within 5 minutes, got what I needed. Seems that “tlp” has an USB autosuspend feature that might interfere with the USB-Ethernet adapter.

Using “lsusb”, I got the USB-Ethernet device ID as 0bda:8153

With that information I added the following to /etc/default/tlp

USB_BLACKLIST="0bda:8153"

Did a reboot and yes, when it came up, the USB-Ethernet was working as it should. No more “Link is not ready” error message.

TECHTIP: Centos 7 on Asus UX305 – External Monitor Scaling

When using an external monitor, the screen resolution difference caused an issue with the fonts. The constant changing of DPI and font sizes was time consuming. Researched around and came up with the following script.

Key to making this work
(a) My external monitor only runs on 1280×1024
(b) The panning parameters are directly calculated based on the scale
(c) You will probably need to test out which scale your are comfortable with. On certain days, I’m good with a scale factor of 18, on others, I am good with a scale factor of 15
(d) You need root rights to carry out this scaling
(e) Add yourself to /etc/sudoers, I have mine as follows:

1
2
# cat /etc/sudoers | grep roy
roy ALL=(ALL) NOPASSWD: ALL

Here’s the script proper. Remember to make the file executable i.e. chmod +x and you can run the script as follows:
$ /home/roy/scripts/myux305scaling 15
$ /home/roy/scripts/myux305scaling 16
$ /home/roy/scripts/myux305scaling 17
… etc …

$cat /home/roy/scripts/myux305scaling
#!/bin/bash

mycolor() {
case $1 in
bold|BOLD|Bold) MYCOLOR=1 ;;
red|RED|Red) MYCOLOR=31 ;;
green|GREEN|Green) MYCOLOR=32 ;;
brown|BROWN|Brown) MYCOLOR=33 ;;
blink|BLINK|Blink) MYCOLOR=5 ;;
blue|BLUE|Blue) MYCOLOR=34 ;;
underline|UNDERLINE|Underline) MYCOLOR=4 ;;
*) MYCOLOR=0 ;;
esac
}

yourchoice() {
read choice
case $choice in
y|Y|yes|YES|Yes) return 1;;
*) return 0;;
esac
}

showmsg() {
mymsg=${1:-ENTER_SOME_TEXT_PLEASE}
getcolor=${2}
getnewline=${3:-0}
mycolor ${getcolor}
if [ "$getnewline" -gt 0 ] ; then
echo -e "\033[${MYCOLOR}m${mymsg}\033[0m"
else
echo -n `echo -e "\033[${MYCOLOR}m${mymsg}\033[0m"`
fi
}

if [ -z "$1" ]
then
echo "Usage:"
echo "myux305scaling [scaling-level-0-11-12-13-14-15-16-17-18-19-20-25]"
exit 1
fi

level0=0
level11=0
level12=0
level13=0
level14=0
level15=0
level16=0
level17=0
level18=0
level19=0
level20=0
level25=0

for ARG in $1; do
if [ x"$ARG" == "x0" ] ; then
level0=1
fi
if [ x"$ARG" == "x11" ] ; then
level11=1
fi
if [ x"$ARG" == "x12" ] ; then
level12=1
fi
if [ x"$ARG" == "x13" ] ; then
level13=1
fi
if [ x"$ARG" == "x14" ] ; then
level14=1
fi
if [ x"$ARG" == "x15" ] ; then
level15=1
fi
if [ x"$ARG" == "x16" ] ; then
level16=1
fi
if [ x"$ARG" == "x17" ] ; then
level17=1
fi
if [ x"$ARG" == "x18" ] ; then
level18=1
fi
if [ x"$ARG" == "x19" ] ; then
level19=1
fi
if [ x"$ARG" == "x20" ] ; then
level20=1
fi
if [ x"$ARG" == "x25" ] ; then
level25=1
fi

done

##################################################
### GENERAL STARTUP
##################################################
### showmsg "Current Brightness ... " "*" "0"
### showmsg `cat /sys/class/backlight/intel_backlight/actual_brightness` "*" "1"
showmsg "Setting Scaling Level ... " "BLUE" "0"
showmsg "$ARG " "BLUE" "0"

##################################################
### CASE OF LEVEL0
##################################################
if [ $level0 -eq 1 ] ; then
sudo xrandr --output HDMI1 --mode 1280x1024 --panning 1280x1024 --scale 1.00x1.00
showmsg "DONE" "BLUE" "1"
showmsg "Scaling level set to 1.00 ... " "BLUE" "1"
fi

##################################################
### CASE OF LEVEL11
##################################################
if [ $level11 -eq 1 ] ; then
sudo xrandr --output HDMI1 --mode 1280x1024 --panning 1421x1137 --scale 1.11x1.11
showmsg "DONE" "BLUE" "1"
showmsg "Scaling level set to 1.11 ... " "BLUE" "1"
fi

##################################################
### CASE OF LEVEL12
##################################################
if [ $level12 -eq 1 ] ; then
sudo xrandr --output HDMI1 --mode 1280x1024 --panning 1434x1147 --scale 1.12x1.12
showmsg "DONE" "BLUE" "1"
showmsg "Scaling level set to 1.12 ... " "BLUE" "1"
fi

##################################################
### CASE OF LEVEL13
##################################################
if [ $level13 -eq 1 ] ; then
sudo xrandr --output HDMI1 --mode 1280x1024 --panning 1447x1157 --scale 1.13x1.13
showmsg "DONE" "BLUE" "1"
showmsg "Scaling level set to 1.13 ... " "BLUE" "1"
fi

##################################################
### CASE OF LEVEL14
##################################################
if [ $level14 -eq 1 ] ; then
sudo xrandr --output HDMI1 --mode 1280x1024 --panning 1460x1168 --scale 1.14x1.14
showmsg "DONE" "BLUE" "1"
showmsg "Scaling level set to 1.14 ... " "BLUE" "1"
fi

##################################################
### CASE OF LEVEL15
##################################################
if [ $level15 -eq 1 ] ; then
sudo xrandr --output HDMI1 --mode 1280x1024 --panning 1472x1178 --scale 1.15x1.15
showmsg "DONE" "BLUE" "1"
showmsg "Scaling level set to 1.15 ... " "BLUE" "1"
fi

##################################################
### CASE OF LEVEL16
##################################################
if [ $level16 -eq 1 ] ; then
sudo xrandr --output HDMI1 --mode 1280x1024 --panning 1485x1188 --scale 1.16x1.16
showmsg "DONE" "BLUE" "1"
showmsg "Scaling level set to 1.16 ... " "BLUE" "1"
fi

##################################################
### CASE OF LEVEL17
##################################################
if [ $level17 -eq 1 ] ; then
sudo xrandr --output HDMI1 --mode 1280x1024 --panning 1498x1199 --scale 1.17x1.17
showmsg "DONE" "BLUE" "1"
showmsg "Scaling level set to 1.17 ... " "BLUE" "1"
fi

##################################################
### CASE OF LEVEL18
##################################################
if [ $level18 -eq 1 ] ; then
sudo xrandr --output HDMI1 --mode 1280x1024 --panning 1511x1209 --scale 1.18x1.18
showmsg "DONE" "BLUE" "1"
showmsg "Scaling level set to 1.18 ... " "BLUE" "1"
fi

##################################################
### CASE OF LEVEL19
##################################################
if [ $level19 -eq 1 ] ; then
sudo xrandr --output HDMI1 --mode 1280x1024 --panning 1523x1219 --scale 1.19x1.19
showmsg "DONE" "BLUE" "1"
showmsg "Scaling level set to 1.19 ... " "BLUE" "1"
fi

##################################################
### CASE OF LEVEL20
##################################################
if [ $level20 -eq 1 ] ; then
sudo xrandr --output HDMI1 --mode 1280x1024 --panning 1536x1229 --scale 1.20x1.20
showmsg "DONE" "BLUE" "1"
showmsg "Scaling level set to 1.20 ... " "BLUE" "1"
fi

##################################################
### CASE OF LEVEL25
##################################################
if [ $level25 -eq 1 ] ; then
sudo xrandr --output HDMI1 --mode 1280x1024 --panning 1600x1280 --scale 1.25x1.25
showmsg "DONE" "BLUE" "1"
showmsg "Scaling level set to 1.25 ... " "BLUE" "1"
fi

##################################################
### GENERAL END
##################################################

TECHTIP: Centos 7 on Asus UX305 – Trackpad Control

When using an external mouse, the touchpad gets in the way sometimes. Maybe its just because my hands are too big but its an annoyance that I can do without.

Got the following hack script to solve this.

Key to making this work
(a) Disable = xinput set-prop ‘PS/2 Elantech Touchpad’ ‘Device Enabled’ 0
(b) Enable = xinput set-prop ‘PS/2 Elantech Touchpad’ ‘Device Enabled’ 1

Here’s the script proper. Remember to make the file executable i.e. chmod +x and you can run the script as follows:
$ /home/roy/scripts/myux305touchpad 0
$ /home/roy/scripts/myux305touchpad 1

$ cat /home/roy/scripts/myux305touchpad
#!/bin/bash
mycolor() {
case $1 in
bold|BOLD|Bold) MYCOLOR=1 ;;
red|RED|Red) MYCOLOR=31 ;;
green|GREEN|Green) MYCOLOR=32 ;;
brown|BROWN|Brown) MYCOLOR=33 ;;
blink|BLINK|Blink) MYCOLOR=5 ;;
blue|BLUE|Blue) MYCOLOR=34 ;;
underline|UNDERLINE|Underline) MYCOLOR=4 ;;
*) MYCOLOR=0 ;;
esac
}

yourchoice() {
read choice
case $choice in
y|Y|yes|YES|Yes) return 1;;
*) return 0;;
esac
}

showmsg() {
mymsg=${1:-ENTER_SOME_TEXT_PLEASE}
getcolor=${2}
getnewline=${3:-0}
mycolor ${getcolor}
if [ "$getnewline" -gt 0 ] ; then
echo -e "\033[${MYCOLOR}m${mymsg}\033[0m"
else
echo -n `echo -e "\033[${MYCOLOR}m${mymsg}\033[0m"`
fi
}

if [ -z "$1" ]
then
echo "Usage:"
echo "myux305touchpad [0=disable] [1=enable]"
exit 1
fi

choice0=0
choice1=0

for ARG in $1; do
if [ x"$ARG" == "x0" ] ; then
choice0=1
fi
if [ x"$ARG" == "x1" ] ; then
choice1=1
fi
done

##################################################
### GENERAL STARTUP
##################################################
##################################################
### CASE OF CHOICE0
##################################################
if [ $choice0 -eq 1 ] ; then
xinput set-prop 'PS/2 Elantech Touchpad' 'Device Enabled' 0
showmsg "Touchpad ... " "*" "0"
showmsg "DISABLED" "RED" "1"
fi

##################################################
### CASE OF CHOICE1
##################################################
if [ $choice1 -eq 1 ] ; then
xinput set-prop 'PS/2 Elantech Touchpad' 'Device Enabled' 1
showmsg "Touchpad ... " "*" "0"
showmsg "ENABLED" "BLUE" "1"
fi

##################################################
### GENERAL END
##################################################

TECHTIP: Centos 7 on Asus UX305 – Brightness Control

Realized that the soft keys for brightness control does not work while in Centos 7.

Got the following hack script to solve this.

Key to making this work
(a) Brightness level is controlled in /sys/class/backlight/intel_backlight/brightness
(b) You need root rights to echo a new value into the file above
(c) Add yourself to /etc/sudoers, I have mine as follows:

# cat /etc/sudoers | grep roy
roy ALL=(ALL) NOPASSWD: ALL

Here’s the script proper. Remember to make the file executable i.e. chmod +x and you can run the script as follows:
$ /home/roy/scripts/myux305brightness 1
$ /home/roy/scripts/myux305brightness 2
$ /home/roy/scripts/myux305brightness 3
… etc …

# cat /home/roy/scripts/myux305brightness
#!/bin/bash
mycolor() {
case $1 in
bold|BOLD|Bold) MYCOLOR=1 ;;
red|RED|Red) MYCOLOR=31 ;;
green|GREEN|Green) MYCOLOR=32 ;;
brown|BROWN|Brown) MYCOLOR=33 ;;
blink|BLINK|Blink) MYCOLOR=5 ;;
blue|BLUE|Blue) MYCOLOR=34 ;;
underline|UNDERLINE|Underline) MYCOLOR=4 ;;
*) MYCOLOR=0 ;;
esac
}

yourchoice() {
read choice
case $choice in
y|Y|yes|YES|Yes) return 1;;
*) return 0;;
esac
}

showmsg() {
mymsg=${1:-ENTER_SOME_TEXT_PLEASE}
getcolor=${2}
getnewline=${3:-0}
mycolor ${getcolor}
if [ "$getnewline" -gt 0 ] ; then
echo -e "\033[${MYCOLOR}m${mymsg}\033[0m"
else
echo -n `echo -e "\033[${MYCOLOR}m${mymsg}\033[0m"`
fi
}

if [ -z "$1" ]
then
echo "Usage:"
echo "myux305brightness [brightness-level-0-1-2-3-4-5-6-7-8-9]"
exit 1
fi

level0=0
level1=0
level2=0
level3=0
level4=0
level5=0
level6=0
level7=0
level8=0
level9=0

for ARG in $1; do
if [ x"$ARG" == "x0" ] ; then
level0=1
fi
if [ x"$ARG" == "x1" ] ; then
level1=1
fi
if [ x"$ARG" == "x2" ] ; then
level2=1
fi
if [ x"$ARG" == "x3" ] ; then
level3=1
fi
if [ x"$ARG" == "x4" ] ; then
level4=1
fi
if [ x"$ARG" == "x5" ] ; then
level5=1
fi
if [ x"$ARG" == "x6" ] ; then
level6=1
fi
if [ x"$ARG" == "x7" ] ; then
level7=1
fi
if [ x"$ARG" == "x8" ] ; then
level8=1
fi
if [ x"$ARG" == "x9" ] ; then
level9=1
fi
done

##################################################
### GENERAL STARTUP
##################################################
showmsg "Current Brightness ... " "*" "0"
showmsg `cat /sys/class/backlight/intel_backlight/actual_brightness` "*" "1"
showmsg "Setting Brightness ... " "BLUE" "0"
showmsg "$ARG " "BLUE" "0"

##################################################
### CASE OF LEVEL0
##################################################
if [ $level0 -eq 1 ] ; then
sudo chmod 666 /sys/class/backlight/intel_backlight/brightness
sudo echo "037" > /sys/class/backlight/intel_backlight/brightness
fi

##################################################
### CASE OF LEVEL1
##################################################
if [ $level1 -eq 1 ] ; then
sudo chmod 666 /sys/class/backlight/intel_backlight/brightness
sudo echo "137" > /sys/class/backlight/intel_backlight/brightness
fi

##################################################
### CASE OF LEVEL2
##################################################
if [ $level2 -eq 1 ] ; then
sudo chmod 666 /sys/class/backlight/intel_backlight/brightness
sudo echo "237" > /sys/class/backlight/intel_backlight/brightness
fi

##################################################
### CASE OF LEVEL3
##################################################
if [ $level3 -eq 1 ] ; then
sudo chmod 666 /sys/class/backlight/intel_backlight/brightness
sudo echo "337" > /sys/class/backlight/intel_backlight/brightness
fi

##################################################
### CASE OF LEVEL4
##################################################
if [ $level4 -eq 1 ] ; then
sudo chmod 666 /sys/class/backlight/intel_backlight/brightness
sudo echo "437" > /sys/class/backlight/intel_backlight/brightness
fi

##################################################
### CASE OF LEVEL5
##################################################
if [ $level5 -eq 1 ] ; then
sudo chmod 666 /sys/class/backlight/intel_backlight/brightness
sudo echo "537" > /sys/class/backlight/intel_backlight/brightness
fi

##################################################
### CASE OF LEVEL6
##################################################
if [ $level6 -eq 1 ] ; then
sudo chmod 666 /sys/class/backlight/intel_backlight/brightness
sudo echo "637" > /sys/class/backlight/intel_backlight/brightness
fi

##################################################
### CASE OF LEVEL7
##################################################
if [ $level7 -eq 1 ] ; then
sudo chmod 666 /sys/class/backlight/intel_backlight/brightness
sudo echo "737" > /sys/class/backlight/intel_backlight/brightness
fi

##################################################
### CASE OF LEVEL8
##################################################
if [ $level8 -eq 1 ] ; then
sudo chmod 666 /sys/class/backlight/intel_backlight/brightness
sudo echo "837" > /sys/class/backlight/intel_backlight/brightness
fi

##################################################
### CASE OF LEVEL9
##################################################
if [ $level9 -eq 1 ] ; then
sudo chmod 666 /sys/class/backlight/intel_backlight/brightness
sudo echo "937" > /sys/class/backlight/intel_backlight/brightness
fi

##################################################
### GENERAL END
##################################################
showmsg "DONE" "BLUE" "1"
showmsg "New Brightness ....... " "RED" "0"
showmsg `cat /sys/class/backlight/intel_backlight/actual_brightness` "RED" "1"

TECHTIP: Centos 7 on Asus UX305 – Installation

Purchased an Asus UX305[1]  to replace my ageing X61 (since 2007). Did not get the Asus locally but instead got it shipped in from US. M-5Y10c 8GB Ram and 256GB SSD. Cost me just under S$1100 after shipment and taxes. Been using it for a good part of 2 weeks now and its a niffy package.

This series of posts hopes to give an idea of what I did to get Centos 7 installed and customized on the machine.

The Asus UX305 that I got from US came pre-installed with Windows 10. Yes, I did complete the setup of Windows 10. Played around with it for a good 30 minutes and decided that was enough. I had to get my fix of Centos on the machine.

The key considerations for installing Centos on the machine were as follows:
1. A working Centos 7 installation
2. Microsoft Windows Recovery Partition, just in case (can be removed thereafter)

Here’s what I did
– boot up using a Centos 7 bootable usb (no issues encountered)
– select install with GNOME desktop
– select install with office suite
– select install with internet applications
– remove existing windows partition (237gb)(sda3)
– leave existing EFI (100mb)(sda1)
– leave existing microsoft reserved partition (16mb)(sda2)
– leave existing windows recovery partition (450mb)(sda4)
– created new users as required
– created new bios boot partition (1mb)(sda3) (this was required by Centos installer)
– created new /boot partition (500mb)(ext4)
– created new /home partition (225gb)(ext4)(lvm)
– created new / partition (025gb)(ext4)(lvm)
– created new swap partition (500mb)
– finally, disk structure is as follows:

sda1 100M EFI
sda2 16M Microsoft Reserver Partition
sda3 1M Bios Boot Partition
sda4 450M Windows Recovery Partition
sda5 500M Centos /boot Partition
sda6 237G Centos LVM (includes / + /home + swap)

– wait for the installation to be completed, reboot and we are done.

Upon reboot, the machine booted nicely in Centos 7.

Once logged in, I realized that we don’t have the correct wireless driver installed. Search around and found an old usb-to-ethernet 10/100mbps adapter. Plugged that in and it worked nicely. We have internet access. Got down to doing the updates and installing the iwl7265 fireware for the wireless. Rebooted the machine and the wireless came up just fine.

# yum update
# yum list iw*
# yum install iwl7265-firmware
# yum install screen
# yum install epel-release
# reboot

Decided that I’m better off with MATE rather than GNOME. Found GNOME a little too CPU intensive and I don’t need all that eye-candy.

# yum groupinstall "MATE Desktop"
# reboot

Installed tuned to make use of available facilities to switch power modes. Especially useful when running on batteries.

# yum install tuned
# tuned-adm profile powersave
# tuned-adm profile balanced
# tuned-adm profile desktop

On my system, I have a number of users. Don’t like the user listing to come up at the login screen, so the following disables it.

# vi /etc/dconf/db/gdm.d/00-login-screen
[org/gnome/login-screen]
# Do not show the user list
disable-user-list=true
# dconf update

Installing other packages that I use

# yum install evolution thunderbird openvpn
# yum install gftp transmission pidgin
# yum install sendmail dovecot squirrelmail
# yum install x2goclient x2godesktopsharing
# yum install jwhois lzo lynx
# yum install yum-plugin-fastestmirror
# yum install lm_sensors
# yum install system-config-firewall
# yum install sendmail-cf
# yum install qemu-kvm libvirt virt-install bridge-utils bind-utils virt-manager

Setting up the Google Chrome Repo and installing Google Chrome

# cd /etc/yum.repos.d/
# cat google-chrome.repo
[google-chrome]
name=google-chrome
baseurl=http://dl.google.com/linux/chrome/rpm/stable/$basearch
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub
# yum install google-chrome-stable

I guess that pretty much provides an overview as to how I got Centos 7 working my Asus UX305.

[1] https://www.asus.com/sg/Notebooks/ASUS_ZENBOOK_UX305/

1 Wish, Day Before Nomination Day, GE2015

Someone posed a question to me today and I gave him a rather off the cuff answer. Typing this now made me re-think on the possibility of my reply.

===============

A Member of Parliament (MP) is an elected position and is a representative of the people. He(She) must first be accountable to the people that supported and elected him.

To me, accountability is the feature of checks and balances. We must have a sufficiently robust opposition in order to perform the role of checking and balancing the Government.

I am not a supporter of any political party. My vote is there to be won.

During this election, I am on the lookout for which opposition party has the best ability of performing this role.

A full 89 seat parliament run by any single ruling party would not be my choice parliament.

I don’t have a magical number but I know sufficiently to say this…

PAP is my choice of Government. The opposition parties cannot/will-not/should-not form the Government. They just don’t have what it takes. Period. In my books, there is no debate about it.

While PAP forms the Government, I would want an opposition party in parliament that is robust enough to check and require balance from the dominant ruling party. The reverse can also be demanded from the ruling party.

I want an opposition in the parliament …
– not as the ruling government
– not too weak to be over-run by the ruling party
– not too strong to cause a grid-lock on important bills and policies
– not too weak so as to represent an alternate view to the ruling party whip
– not too strong so that the ruling party can conduct checks and balance on them
– not too weak so that they can conduct check and balance on the ruling party

Yes, its a fine balance and I want the best of all worlds.

You asked for a wish for GE2015 and I just did my wish.

A bit too much to ask? Sure, but then again, this is my country, my homeland and I only want the best for my country.

ADDONs :: Tag COEs to owners, not vehicles

I’m glad that my letter to the Straits Times forum was published on Sat 12 Jan 2013. I’m quoting it here for completeness. (Not sure if I’m allowed to do so)

Tag COEs to owners, not vehicles

The new Carbon Emissions-based Vehicle Scheme is meant to encourage car owners to purchase vehicles that are more fuel-efficient and less pollutive. However, it seems that more owners are hanging on to their less-than-efficient vehicles due to high certificate of entitlement (COE) prices (“Sharp rise in older cars amid high COE prices”; Monday).

COEs were introduced as a means of limiting car ownership. However, by tagging them to the physical vehicle, we are limiting the COE scheme’s purpose and reach.

The authorities should look into decoupling the COE from the physical vehicle and tagging it instead to the individual, that is, the car owner.

The current system does not provide vehicle owners with any incentive to change their cars and take advantage of the advances in vehicular technology and improvements in fuel consumption.

As vehicle owners delay the process of upgrading their cars, the vehicular population here ages and the number of breakdowns goes up. This results in more traffic jams, slower traffic and an overall decrease in productivity.

If COEs are tagged to the individual instead of the vehicle, the owner would be able to upgrade his car. Vehicles will then be priced based on their intrinsic value, instead of being inflated by the COE cost.

Furthermore, if COEs are made non-rebatable and transferable only after the first five years, and perhaps even coupled with a pay-as-you-bid system, it could encourage a more prudent bidding process.

The planning and management of the car population would also become easier as there would no longer be a need to guess the number of COEs made available through the deregistration process.

Unfortunately, as per the restrictions and limitations of the print media, I had to streamline my letter, leaving out a number of clarifications. I’ll do these here on my blog instead.

(a) Pay-As-You-Bid Bidding Process

Till date, I personally cannot understand the rational behind successful COE bidders paying the price of the lowest successful bid. Why allow such discrepancies in bidding practices? We are all familiar with paying of items as we bid and we should continue in that extent. A Pay-As-You-Bid model will provide for a simpler, more transparent bidding system.

(b) COEs to be made non-transferable for the first 5 years and made non-refundable

To minimize the risks of profiteering, all COEs are to be non-transferable for the first 5 years. Additionally, COEs should also be made non-refundable. This non-refundable option is essential in maintaining stability in COE prices.

In the current day environment, if price of the COEs dramatically corrects to say $10,000, existing owners of vehicles 1-2 years old will be looking to scrap their existing ones and replacing them with new ones. When their existing vehicles are scrapped, the un-used portion of the COE is refunded back to them. The refund of un-used COEs provides an unwanted artificial safety net.

Making COEs non-refundable also helps in determining and controlling vehicle growth. The authorities will then be able to correctly forecast vehicle growth as all COEs can be safely assumed to be used to the end of their tenure.

(c) Tag car prices to their intrinsic value, excluding the cost of COEs

If COEs are to be tagged to the owner and not to the vehicle, vehicle prices should be adjusted accordingly to reflect their true value. Leave the COEs bidding to the owners themselves and vehicle dealers, agents, distributors should only concentrate on their original business of buying/selling vehicles and not dwelling into the COE system. Additionally, since vehicle prices are adjusted to their intrinsic value, vehicle loans can then be re-adjusted to only covering only the true asset i.e. the vehicle itself. The cost of the COE should not be allowed to be part of a loan.

(d) Tag COEs to the owner, not the vehicle

At present, COEs are issued and tagged to a vehicle. If the vehicle is sold, the COE is sold along with it. Why is it so? If COEs are meant to limit car OWNERship, shouldn’t we be tagging the COE to the OWNER rather than the vehicle itself?

Think about the situation before COEs were implemented. What was the situation then? Cars were traded purely on their age, their condition and on their own intrinsic value. How was scrap cars handled? Same way that it is done now, via the Preferential Additional Registration Fee (PARF) rebate.

Scrapping a car before it is 10 years old entitles one to a PARF rebate. Cars older than 10 years old, do not enjoy such a rebate. Further more, cars older than 10 years old have to pay a premium road tax to remain on the roads.

As such, in terms of dealing with cars that are older than 10 years old, we already have policies in place to “encourage” people to scrap their cars. This hasn’t changed and the suggestion doesn’t include a change to this.

IF COEs are pegged to owners, how would this change?

Let’s try and put all the suggestions into place and imagine a scenario …

Mr. Tan would like to bid for a COE. COEs are not longer covered by loans and as such, he needs to save sufficiently for the bid and bidding process. He goes to the ATM, submits his bid. The bid price is immediately deducted from his account. If he is successful, he pays for the COE on the exact sum that he has bid.

Mr. Tan is successful and now goes shopping for his car. He can choose between a new car and the resale market as all cars are now traded on their value without COEs. He decides on a new car, a 2-door and registers the car with his new COE.

2 years down the road, Mr. Tan is now married and is expecting a new baby into his family. He sells is 2-door car and changes to a 4-door sedan. He de-registers his COE from this 2-door and registers the same COE to a 4-door sedan instead.

Another 2 years has passed (5th year of the COE), Mr. Tan now has 4 kids and clearly a 4-door sedan is not sufficient. He trades in his 4 -door for a MPV.

All these done within the same 10 year COE term.

A situation rises on the 10th year of Mr. Tan’s COE term. His COE is expiring but his MPV is only 5 years old. What does he do? Clearly, he has a choice to make. He can either

  • Drive the MPV till the COE term lapses and then sell the MPV
  • Bid for a new COE and use the new COE to re-register the MPV

The age of vehicle and COE are decoupled and are independent of each other.

Each owner must have a valid COE for each vehicle owned.

Now imagine the same scenario applied to commercial vehicles. The suggested changes would allow businesses to purchase vehicles according to their needs. At the beginning, it might be a small van and moving onto a larger truck if necessary, all within the same COE term.

While its true that the suggested changes will not cover all situations and outcomes, it was done in the hope of  achieving the following:

  • Improving the “flood” and “desert” cycles of COE supplies that we have been witnessing
  • Removing the requirement for a “”guesstimate” figure to the number of vehicles de-registered
    (Since all COEs are presumed to be used for their entire 10 year tenure)
  • Improving clarity in number of COEs available via vehicle growth
  • Improving and providing prudence in obtaining car loans and reducing overall monthly debt servicing ratios
    (Since cost of COEs are not included in the car loans and are to be fully paid-up at time of bid)
  • Provide flexibility of changing vehicle to the COE owner
  • Returning the vehicle industry to its core of buying/selling vehicles and leaving the COE bidding process to the vehicle owners
  • Discourage “over-the-top” bidding via a Pay-As-You-Bid model

Yes, these might be radical changes to the existing COE system but we are a vibrant and efficient society. We cannot rest on our laurels and must continually challenge ourselves to better our existing policies. Its time for the COE system to undergo a major and radical revamp with or without the above-mentioned suggestions.