From 8970eb68638940ef5aaa14bc113925b9c1339f25 Mon Sep 17 00:00:00 2001 From: David Schneider Date: Fri, 20 Jan 2017 14:39:32 -0800 Subject: [PATCH 1/5] Disable the Intel driver. Use modesetting; glamor will happen by default if available. Compatibility with Intel DRI has deteriorated significantly with Freon. Using modesetting will be the most compatible and only has a minor performance hit. --- targets/xorg | 74 +++++++--------------------------------------------- 1 file changed, 9 insertions(+), 65 deletions(-) diff --git a/targets/xorg b/targets/xorg index ec51cea31..bb98e67f7 100644 --- a/targets/xorg +++ b/targets/xorg @@ -7,6 +7,9 @@ PROVIDES='x11' DESCRIPTION='X.Org X11 backend. Enables GPU acceleration on supported platforms.' CHROOTBIN='croutoncycle croutontriggerd croutonxinitrc-wrapper setres xinit' CHROOTETC='xbindkeysrc.scm xorg-intel-sna.conf xserverrc xserverrc-xorg xserverrc-local.example' +if [ -z "$TARGETNOINSTALL" -a -f "/sys/class/tty/tty0/active" ]; then + error 99 "xorg target is only supported on Freon-based systems." +fi . "${TARGETSDIR:="$PWD"}/common" ### Append to prepare.sh: @@ -18,12 +21,6 @@ rm -f '/etc/crouton/xserverrc-x11' # Figure out what we need on this system -# Freon? -freon='' -if [ ! -f "/sys/class/tty/tty0/active" ]; then - freon='y' -fi - # Pull in backported Xorg when possible on precise to support newer hardware backport='' if release -eq precise; then @@ -40,21 +37,10 @@ fi # Intel? inteldriver='' -intelhasfbc='' pinmesa='' -intelfbcsupport='y' if [ "${ARCH#arm}" = "$ARCH" ]; then inteldriver="xserver-xorg-video-intel$backport" - # If the system has an Intel FBC-capable video card but has too old a driver - # to support the chipset, we'll need to disable hardware acceleration. - if grep -q 1 '/sys/module/i915/parameters/i915_enable_fbc' 2>/dev/null; then - intelhasfbc=y - if release -le wheezy -le sana; then - intelfbcsupport='' - fi - fi - # On saucy onwards, if kernel version is 3.4, manually pin down old mesa # libraries, as new ones require version >=3.6 (see issue #704). # This is only required on non-Atom Intel chipsets (Atom uses i915 dri driver) @@ -62,9 +48,6 @@ if [ "${ARCH#arm}" = "$ARCH" ]; then ! grep -q 0xa0 /sys/class/graphics/fb0/device/device; then pinmesa='y' fi - - # Unhold xserver-xorg-video-intel, modification will be reapplied later. - apt-mark unhold "$inteldriver" 2>/dev/null || true fi # Catalog relevant and irrelevant video drivers @@ -77,28 +60,12 @@ else modesetting='' fi -installvideodrivers='' -removevideodrivers='' -if [ -n "$freon" ]; then - installvideodrivers="$modesetting" - removevideodrivers="$fbdev" -else - installvideodrivers="$fbdev" -fi -if [ -n "$inteldriver" ]; then - # If we need SNA (for fbc) but don't have it, don't install intel - if [ -z "$intelhasfbc" -o -n "$intelfbcsupport" ]; then - installvideodrivers="$installvideodrivers $inteldriver" - else - removevideodrivers="$removevideodrivers $inteldriver" - fi -fi +installvideodrivers="$modesetting" +removevideodrivers="$fbdev $inteldriver" -# On Freon, we need crazy xorg hacks -if [ -n "$freon" ]; then - compile freon '-ldl -ldrm -I/usr/include/libdrm' so libdrm-dev -fi +# Compile crazy xorg hacks +compile freon '-ldl -ldrm -I/usr/include/libdrm' so libdrm-dev # Pin precise's version of mesa if necessary pinfile='/etc/apt/preferences.d/precise-mesa-pin' @@ -207,35 +174,12 @@ if [ -n "$removevideodrivers" ]; then remove $removevideodrivers fi -# If this is a system with framebuffer compression, we need SNA+tearfree -xorgconf='/usr/share/X11/xorg.conf.d/20-crouton-intel-sna.conf' -if [ -n "$intelhasfbc" -a -n "$intelfbcsupport" ]; then - mkdir -p "${xorgconf%/*}" - ln -sfT /etc/crouton/xorg-intel-sna.conf "$xorgconf" -else - # In case this got moved to a different system, delete the config - rm -f "$xorgconf" -fi +# Remove old Intel SNA workaround +rm -f '/usr/share/X11/xorg.conf.d/20-crouton-intel-sna.conf' # Fix launching X11 from inside crosh (user doesn't own a TTY) echo 'allowed_users=anybody' > '/etc/X11/Xwrapper.config' -inteldrv='/usr/lib/xorg/modules/drivers/intel_drv.so' -if [ -n "$freon" -a -e "$inteldrv" ]; then - # Modify the Intel driver to call getuid0 (provided by croutonfreon.so) - # instead of geteuid, to force DRM master setting/dropping. - offset="`grep -F -m 1 -boa 'geteuid' "$inteldrv" 2>/dev/null || true`" - if [ -n "$offset" ]; then - echo -n 'getuid0' | dd seek="${offset%:*}" bs=1 of="$inteldrv" \ - conv=notrunc,nocreat 2>/dev/null - fi - - if grep -F -q -a 'getuid0' "$inteldrv" 2>/dev/null; then - # Hold xserver-xorg-video-intel to make sure that the modification - # (which may have been made in a previous update) does not get erased. - apt-mark hold "$inteldriver" - fi -fi TIPS="$TIPS You can flip through your running chroot desktops and Chromium OS by hitting From 9befc9c94d9b90ec8b569b6daf1b98bf9ef99360 Mon Sep 17 00:00:00 2001 From: David Schneider Date: Fri, 20 Jan 2017 16:16:48 -0800 Subject: [PATCH 2/5] Force trusty to use -lts-xenial and remove kernel 3.4 hacks --- chroot-etc/xorg-intel-sna.conf | 12 ----- targets/xorg | 83 +++------------------------------- 2 files changed, 6 insertions(+), 89 deletions(-) delete mode 100644 chroot-etc/xorg-intel-sna.conf diff --git a/chroot-etc/xorg-intel-sna.conf b/chroot-etc/xorg-intel-sna.conf deleted file mode 100644 index f22b169e8..000000000 --- a/chroot-etc/xorg-intel-sna.conf +++ /dev/null @@ -1,12 +0,0 @@ -# Copyright (c) 2016 The crouton Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -# On Intel platforms with FBC enabled, in order to see anything we need to use -# the SNA driver with the TearFree option. -Section "Device" - Identifier "Intel Graphics SNA+TearFree" - Driver "intel" - Option "AccelMethod" "sna" - Option "TearFree" "true" -EndSection diff --git a/targets/xorg b/targets/xorg index bb98e67f7..10d282f46 100644 --- a/targets/xorg +++ b/targets/xorg @@ -6,7 +6,7 @@ REQUIRES='audio' PROVIDES='x11' DESCRIPTION='X.Org X11 backend. Enables GPU acceleration on supported platforms.' CHROOTBIN='croutoncycle croutontriggerd croutonxinitrc-wrapper setres xinit' -CHROOTETC='xbindkeysrc.scm xorg-intel-sna.conf xserverrc xserverrc-xorg xserverrc-local.example' +CHROOTETC='xbindkeysrc.scm xserverrc xserverrc-xorg xserverrc-local.example' if [ -z "$TARGETNOINSTALL" -a -f "/sys/class/tty/tty0/active" ]; then error 99 "xorg target is only supported on Freon-based systems." fi @@ -25,29 +25,19 @@ rm -f '/etc/crouton/xserverrc-x11' backport='' if release -eq precise; then if [ "${ARCH#arm}" = "$ARCH" ]; then - # Note: lts-trusty mesa requires kernel version >=3.6 - if ! uname -r | grep -q "^3.4."; then - backport='-lts-trusty' - fi + backport='-lts-trusty' else # ARM only offers quantal backport at the moment backport='-lts-quantal' fi +elif release -eq trusty; then + backport='-lts-xenial' fi # Intel? inteldriver='' -pinmesa='' if [ "${ARCH#arm}" = "$ARCH" ]; then inteldriver="xserver-xorg-video-intel$backport" - - # On saucy onwards, if kernel version is 3.4, manually pin down old mesa - # libraries, as new ones require version >=3.6 (see issue #704). - # This is only required on non-Atom Intel chipsets (Atom uses i915 dri driver) - if release -ge saucy && uname -r | grep -q "^3.4." && - ! grep -q 0xa0 /sys/class/graphics/fb0/device/device; then - pinmesa='y' - fi fi # Catalog relevant and irrelevant video drivers @@ -67,72 +57,11 @@ removevideodrivers="$fbdev $inteldriver" # Compile crazy xorg hacks compile freon '-ldl -ldrm -I/usr/include/libdrm' so libdrm-dev -# Pin precise's version of mesa if necessary +# No systems use kernel 3.4 anymore, so remove the mesa hack pinfile='/etc/apt/preferences.d/precise-mesa-pin' pinlist='/etc/apt/sources.list.d/precise.list' pindummypkg='libwayland-egl1-dummy' -if [ -n "$pinmesa" ]; then - # Create a dummy libwayland-egl1 package, to satisfy dependencies - # (the libraries are actually provided by libegl1-mesa-drivers in precise) - install --minimal --asdeps equivs - - DEBTMP="`mktemp -d crouton.XXXXXX --tmpdir=/tmp`" - addtrap "rm -rf --one-file-system '$DEBTMP'" - - ( cd "$DEBTMP"; equivs-build - ) < "$pinlist" < "$pinfile" < Date: Fri, 20 Jan 2017 16:25:15 -0800 Subject: [PATCH 3/5] Use backports in xiwi --- targets/xiwi | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/targets/xiwi b/targets/xiwi index 6c006f495..8ea3d5315 100755 --- a/targets/xiwi +++ b/targets/xiwi @@ -13,22 +13,29 @@ CHROOTETC='xbindkeysrc.scm xiwi.conf xorg-dummy.conf xserverrc xserverrc-xiwi xs ### Append to prepare.sh: XMETHOD="${XMETHOD:-xiwi}" -ltspackages='' -# On non-ARM precise, install lts-trusty xorg server for compatibility with xorg -# if kernel version != 3.4 (lts-trusty mesa requires version >=3.6) -if [ "${ARCH#arm}" = "$ARCH" ] && release -eq precise \ - && ! uname -r | grep -q "^3.4."; then - # We still install xorg later to pull in its dependencies - ltspackages='-lts-trusty' - install --minimal "xserver-xorg$ltspackages" "libgl1-mesa-glx$ltspackages" +# Pull in backported Xorg when possible on precise to support newer hardware +backport='' +if release -eq precise; then + if [ "${ARCH#arm}" = "$ARCH" ]; then + backport='-lts-trusty' + else + # ARM only offers quantal backport at the moment + backport='-lts-quantal' + fi +elif release -eq trusty; then + backport='-lts-xenial' fi # Unhold xserver-xorg-video-dummy to make sure deps are pulled in if [ "${DISTROAKA:-"$DISTRO"}" = 'debian' ]; then - apt-mark unhold xserver-xorg-video-dummy$ltspackages || true 2>/dev/null + apt-mark unhold xserver-xorg-video-dummy$backport || true 2>/dev/null fi -install xorg xserver-xorg-video-dummy$ltspackages +if [ -n "$backport" ]; then + install --minimal "xserver-xorg$backport" "xserver-xorg-core$backport" \ + "libgl1-mesa-glx$backport" +fi +install xorg xserver-xorg-video-dummy$backport install --minimal i3 # Remove some unsupported options on old versions of i3 @@ -61,7 +68,7 @@ wget $superinsecure -O "$DUMMYBUILDTMP/dummy.tar.gz" \ "$urlbase/xf86-video-dummy-0.3.8.tar.gz" install --minimal --asdeps patch gcc libc-dev pkg-config \ - xserver-xorg-dev$ltspackages x11proto-xf86dga-dev + xserver-xorg-dev$backport x11proto-xf86dga-dev ( cd "$DUMMYBUILDTMP" @@ -404,7 +411,7 @@ EOF if [ "${DISTROAKA:-"$DISTRO"}" = 'debian' ]; then # Hold xserver-xorg-video-dummy to make sure the driver does not get erased - apt-mark hold xserver-xorg-video-dummy$ltspackages + apt-mark hold xserver-xorg-video-dummy$backport fi TIPS="$TIPS"' From 727b0027c57b41658d6ab11ee8f0396f26026ee8 Mon Sep 17 00:00:00 2001 From: David Schneider Date: Fri, 20 Jan 2017 16:40:46 -0800 Subject: [PATCH 4/5] Unhold dummy if backports are enabled --- targets/xiwi | 5 +++++ targets/xorg | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/targets/xiwi b/targets/xiwi index 8ea3d5315..57f86b625 100755 --- a/targets/xiwi +++ b/targets/xiwi @@ -26,6 +26,11 @@ elif release -eq trusty; then backport='-lts-xenial' fi +# Avoid issues when jumping backports +if [ "${DISTROAKA:-"$DISTRO"}" = 'debian' -a -n "$backport" ]; then + apt-mark unhold xserver-xorg-video-dummy || true 2>/dev/null +fi + # Unhold xserver-xorg-video-dummy to make sure deps are pulled in if [ "${DISTROAKA:-"$DISTRO"}" = 'debian' ]; then apt-mark unhold xserver-xorg-video-dummy$backport || true 2>/dev/null diff --git a/targets/xorg b/targets/xorg index 10d282f46..d494fe329 100644 --- a/targets/xorg +++ b/targets/xorg @@ -34,6 +34,11 @@ elif release -eq trusty; then backport='-lts-xenial' fi +# Avoid issues when jumping backports +if [ "${DISTROAKA:-"$DISTRO"}" = 'debian' -a -n "$backport" ]; then + apt-mark unhold xserver-xorg-video-dummy || true 2>/dev/null +fi + # Intel? inteldriver='' if [ "${ARCH#arm}" = "$ARCH" ]; then From 3546f6ca21affb9e9fe1a32133be7ab5e86ed686 Mon Sep 17 00:00:00 2001 From: David Schneider Date: Fri, 20 Jan 2017 16:43:15 -0800 Subject: [PATCH 5/5] Improve migration to backports by forcing xserver-xorg-core --- targets/xorg | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/targets/xorg b/targets/xorg index d494fe329..18275d371 100644 --- a/targets/xorg +++ b/targets/xorg @@ -77,7 +77,8 @@ fi # Install backported xorg instead of the default one if [ -n "$backport" ]; then # We still install xorg later to pull in its dependencies - install --minimal "xserver-xorg$backport" "libgl1-mesa-glx$backport" \ + install --minimal "xserver-xorg$backport" "xserver-xorg-core$backport" \ + "libgl1-mesa-glx$backport" \ "libegl1-mesa$backport" "libgles2-mesa$backport" \ "xserver-xorg-input-synaptics$backport" $installvideodrivers fi