Cinnamon and most other DE have currently poor Hi-DPI support for recent Hi-DPI laptops like the Yoga 2 Pro.
By default, resolutions like 3200x1800 are not suited for DEs, resulting tiny unreadable characters and graphics.
The options are:
- Scale the theme and fonts
Change the resolution
Rescale the screen using xrandr
Theme and fonts scaling doesn't work with software having hardcoded positions for graphics.
Changing resolution to non-native resolution will result in blurriness due to LCD display scaling.
Another option is to use xrandr, which enable buffering screen content in any resolution, and then rescale it to display's resolution.
According to xrandr documentation http://www.x.org/archive/X11R7.5/doc/man/man1/xrandr.1.html:
--scale xxy
Changes the dimensions of the output picture. Values superior to 1 will lead to a compressed screen (screen dimension bigger than the dimension of the output mode), and values below 1 leads to a zoom in on the output. This option is actually a shortcut version of the --transform option.
Which leads to --transform option documentation
--transform a,b,c,d,e,f,g,h,i
Specifies a transformation matrix to apply on the output. Automatically a bilinear filter is selected.
So If we rescale the screen, screen-content will be rescaled using a bilinear filtering. What we do want is having pixel-perfect quadruple pixels so every pixel dimension is twice its native size without any filtering. Unfortunately, xrandr cannot be forced to disable filtering. Let's modify this behaviour by modifying and recompiling xrandr:
Download here: http://cgit.freedesktop.org/xorg/app/xrandr/ (xrandr-1.X.X.tar.gz) the source code and unzip/untar.
XRandR source content is all located in xrandr.c file
Let's go to line 2821 - 2824 (for xrandr-1.4.1):
Code: Select all
if (sx != 1 || sy != 1)
config_output->transform.filter = "bilinear";
else
config_output->transform.filter = "nearest";Let's change the behaviour by changing line 2821 to
Code: Select all
if ((sx != 1 || sy != 1) && (sx != 0.5 || sy != 0.5))(you can also remove lines 2821 to 2823 if you never want to apply bilinear filtering).
Nearest filtering is applying nearest pixel's color to the current pixel, which is the behaviour that we want.
To compile xrandr, you need:
Code: Select all
sudo apt-get install build-essential autoconf xutils-dev
Compile xrandr:
Code: Select all
./autogen.sh
makeThen you can directly use your compiled xrandr:
Code: Select all
./xrandr --output eDP1 --mode "3200x1800" --scale "0.5x0.5"Now your workspace is a bit pixelated, but crisp (no blurriness at all). For optimal quality, use full hinting on fonts (available through Mint Control center).

I'll maybe update this tutorial with some images and links. Do not hesitate to provide feedback. Sorry for my bad english.



