Send approximate physical screen dimensions to the VM

When properly set, applications will have a chance to automatically
detect HiDPI and act accordingly. This is the case for Fedora 23
template and GNOME apps (maybe even all built on top of GTK).

But for privacy reasons, don't provide real values, only some
approximate one. Give enough information to distinguish DPI above 150,
200 and 300. This is some compromise between privacy and HiDPI support.

QubesOS/qubes-issues#1951

This commit is migrated from gui-daemon repository
(dec462795d14a336bf27cc46948bbd592c307401).
This commit is contained in:
Marek Marczykowski-Górecki 2016-08-08 04:02:25 +02:00
parent 6bd127beb3
commit 067cfb7cd6
No known key found for this signature in database
GPG Key ID: 063938BA42CFA724

View File

@ -45,6 +45,11 @@ REGEX_OUTPUT = re.compile(r'''
(?P<x>\d+)[+]
(?P<y>\d+)
)|[\D]) # or not a digit
([ ]\(.*\))?[ ]? # ignore options
( # 304mm x 228mm
(?P<width_mm>\d+)mm[ ]x[ ]
(?P<height_mm>\d+)mm
)?
.* # ignore rest of line
''')
@ -57,11 +62,34 @@ def get_monitor_layout():
if not line.startswith("Screen") and not line.startswith(" "):
output_params = REGEX_OUTPUT.match(line).groupdict()
if output_params['width']:
outputs.append("%s %s %s %s\n" % (
phys_size = ""
if output_params['width_mm']:
# don't provide real values for privacy reasons - see
# #1951 for details
dpi = (int(output_params['width']) * 254 /
int(output_params['width_mm']) / 10)
if dpi > 300:
dpi = 300
elif dpi > 200:
dpi = 200
elif dpi > 150:
dpi = 150
else:
# if lower, don't provide this info to the VM at all
dpi = 0
if dpi:
# now calculate dimensions based on approximate DPI
phys_size = " {} {}".format(
int(output_params['width']) * 254 / dpi / 10,
int(output_params['height']) * 254 / dpi / 10,
)
outputs.append("%s %s %s %s%s\n" % (
output_params['width'],
output_params['height'],
output_params['x'],
output_params['y']))
output_params['y'],
phys_size,
))
return outputs