This file is indexed.

/usr/lib/tasksel/tests/desktop is in tasksel-data 2.88ubuntu9.

This file is owned by root:root, with mode 0o755.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#!/bin/sh
# Try to guess at whether the user would like a desktop installed on their
# system. Of course Debian has many users who use it on a wide array of
# hardware, so this is tricky, but it's only a default.
set -e

if ! [ "$NEW_INSTALL" ]; then
	exit 3
fi

arch="$(dpkg --print-architecture)"

unmark () {
	exit 3
}
mark () {
	exit 2
}

# A few arches have the lion's share of desktops.
common_desktop_architecture () {
	case "$arch" in
	i386|amd64|powerpc*)
		return 0
	;;
	*)
		return 1
	;;
	esac
}

# On some arches it's almost unheard of to run a desktop, at least using
# this task.
unlikely_desktop_architecture () {
	case "$arch" in
	m68k|s390|hppa)
		return 0
	;;
	*)
		return 1
	;;
	esac
}

# Modern desktops take a lot of ram.
enough_ram () {
	min_ram=64
	ram=$(grep ^MemTotal: /proc/meminfo | { read x y z; echo $y; }) || true # kb
	# The 4 is a fuzz factor to allow for kernel ram usage.
	if [ "$ram" ] && [ "$ram" -ge "$(expr $(expr $min_ram - 4) \* 1024)" ]; then
		return 0
	else
		return 1
	fi
}

# The desktop task requires 2 gb or so of disk in /usr, and .5 in /var for
# the debs.
# FIXME: this should really be generalised and used for tasksel to not
# suggest any task for which there is not enough disk.
enough_disk () {
	min_disk=3
	disk=$(df -P /usr | tail -1 | awk '{print $4}')
	if [ "$disk" ] && [ "$disk" -ge "$(expr $min_disk \* 1024 \* 1024)" ]; then
		return 0
	else
		return 1
	fi
}

desktop_hardware () {
	if which laptop-detect >/dev/null 2>&1 && \
		laptop-detect; then
		# Nearly always appropriate to include a desktop.
		return 0
	else
		# TODO: test for the existence of a framebuffer and a mouse.
		# A mouse, in particular, almost always indicates a
		# desktop.
		:
	fi
	return 1
}

rack_hardware () {
	if which dmidecode >/dev/null 2>&1 && \
		dmidecode | grep -q 'Type: Rack Mount Chassis'; then
		return 0
	fi
		
	# XXX further heuristics here to avoid selecting the task on
	# high-end hardware that's intended to be used as a server.
	# For example, if it has two NICs with link, it's probably a
	# server.

	return 1
}

if ! enough_ram || ! enough_disk; then
	unmark
fi

if desktop_hardware; then
	mark
fi

if unlikely_desktop_architecture; then
	unmark
elif common_desktop_architecture; then
	if rack_hardware; then
		unmark
	else
		mark # probably a desktop ...
	fi
else
	# XXX further heuristics here
	:
fi

unmark