/usr/bin/dispcalGUI-apply-profiles is in dispcalgui 1.7.1.6-1.
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 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229  | #! /usr/bin/python
# -*- coding: utf-8 -*-
""" 
Set ICC profiles and load calibration curves for all configured display devices
"""
import sys
if sys.platform == "win32":
	# Setup sys.path for running frozen
	# i.e. add C:\Program Files\dispcalGUI\lib\library.zip
	libpath = "\\".join(sys.executable.replace("/", "\\").split("\\")[:-1]) + "\\library.zip"
	sys.path.insert(0, libpath)
import os
isexe = sys.platform != "darwin" and getattr(sys, "frozen", False)
if sys.platform == "win32" and os.path.isfile(libpath):
	sys.frozen = True
def apply_profiles():
	from dispcalGUI import config
	from dispcalGUI import localization as lang
	from dispcalGUI.log import safe_print
	from dispcalGUI.util_os import which
	from dispcalGUI.worker import Worker, get_argyll_util
	from dispcalGUI.wxwindows import wx
	if not wx.GetApp():
		app = wx.App(0)
	worker = Worker()
	errors = []
	
	safe_print("=" * 80)
	safe_print(lang.getstr("calibration.loading_from_display_profile"))
	# dispwin sets the _ICC_PROFILE(_n) root window atom, per-output xrandr 
	# _ICC_PROFILE property (if xrandr is working) and loads the vcgt for the 
	# requested screen (ucmm backend using color.jcnf), and has to be called 
	# multiple times to setup multiple screens.
	#
	# If there is no profile configured in ucmm for the requested screen (or 
	# ucmm support has been removed, like in the Argyll CMS versions shipped by 
	# recent Fedora releases), it falls back to a possibly existing per-output 
	# xrandr _ICC_PROFILE property (if xrandr is working) or _ICC_PROFILE(_n) 
	# root window atom.
	dispwin = get_argyll_util("dispwin")
	if dispwin:
		worker.enumerate_displays_and_ports(silent=True, check_lut_access=False,
											enumerate_ports=False)
	else:
		errors.append(lang.getstr("argyll.util.not_found", "dispwin"))
	if sys.platform != "win32":
		# gcm-apply sets the _ICC_PROFILE root window atom for the first screen, 
		# per-output xrandr _ICC_PROFILE properties (if xrandr is working) and 
		# loads the vcgt for all configured screens (device-profiles.conf)
		# NOTE: gcm-apply is no longer part of GNOME Color Manager since the 
		# introduction of colord as it's no longer needed
		gcm_apply = which("gcm-apply")
		if gcm_apply:
			worker.exec_cmd(gcm_apply, capture_output=True, skip_scripts=True,
							silent=False)
		# oyranos-monitor sets _ICC_PROFILE(_n) root window atoms (oyranos 
		# db backend) and loads the vcgt for all configured screens when 
		# xcalib is installed
		oyranos_monitor = which("oyranos-monitor")
		xcalib = which("xcalib")
	for i, display in enumerate([display.replace("[PRIMARY]", 
												 lang.getstr("display.primary")) 
								 for display in worker.displays]):
		if display in ("Web @ localhost", "Untethered", "madVR"):
			continue
		# Load profile and set vcgt
		if sys.platform != "win32" and oyranos_monitor:
			display_conf_oy_compat = worker.check_display_conf_oy_compat(i + 1)
			if display_conf_oy_compat:
				worker.exec_cmd(oyranos_monitor, 
								["-x", str(worker.display_rects[i][0]), 
								 "-y", str(worker.display_rects[i][1])], 
								capture_output=True, skip_scripts=True, 
								silent=False)
		if dispwin:
			profile_arg = worker.get_dispwin_display_profile_argument(i)
			if (sys.platform == "win32" or not oyranos_monitor or
				not display_conf_oy_compat or not xcalib or profile_arg == "-L"):
				# Only need to run dispwin if under Windows, or if nothing else
				# has already taken care of display profile and vcgt loading
				# (e.g. oyranos-monitor with xcalib, or colord)
				worker.exec_cmd(dispwin, ["-v", "-d%i" % (i + 1), "-c", 
										  profile_arg], 
								capture_output=True, skip_scripts=True, 
								silent=False)
				errortxt = "\n".join(worker.errors).strip()
				if errortxt and ((not "using linear" in errortxt and
								  not "assuming linear" in errortxt) or 
								 len(errortxt.split("\n")) > 1):
					if "Failed to get the displays current ICC profile" in errortxt:
						# Maybe just not configured
						continue
					elif sys.platform == "win32" or \
					   "Failed to set VideoLUT" in errortxt or \
					   "We don't have access to the VideoLUT" in errortxt:
						errstr = lang.getstr("calibration.load_error")
					else:
						errstr = lang.getstr("profile.load_error")
					errors.append(": ".join([display, errstr]))
					continue
			if (config.getcfg("profile_loader.verify_calibration")
				or "--verify" in sys.argv[1:]):
				# Verify the calibration was actually loaded
				worker.exec_cmd(dispwin, ["-v", "-d%i" % (i + 1), "-V",
										  profile_arg], 
								capture_output=True, skip_scripts=True, 
								silent=False)
				# The 'NOT loaded' message goes to stdout!
				# Other errors go to stderr
				errortxt = "\n".join(worker.errors + worker.output).strip()
				if "NOT loaded" in errortxt or \
				   "We don't have access to the VideoLUT" in errortxt:
					errors.append(": ".join([display, 
											lang.getstr("calibration.load_error")]))
	return errors
def apply_profiles_and_warn_on_error():
	errors = apply_profiles()
	from dispcalGUI import config
	if (errors and (config.getcfg("profile_loader.error.show_msg") or
					"--error-dialog" in sys.argv[1:]) and
		not "--silent" in sys.argv[1:]):
		from dispcalGUI import localization as lang
		from dispcalGUI.wxwindows import InfoDialog, wx
		if not wx.GetApp():
			app = wx.App(0)
		dlg = InfoDialog(None, msg="\n".join(errors), 
						 ok=lang.getstr("ok"), 
						 bitmap=config.geticon(32, "dialog-error"),
						 show=False)
		dlg.do_not_show_again_cb = wx.CheckBox(dlg, -1, lang.getstr("dialog.do_not_show_again"))
		dlg.do_not_show_again_cb.SetValue(not bool(config.getcfg("profile_loader.error.show_msg")))
		def do_not_show_again_handler(event=None):
			config.setcfg("profile_loader.error.show_msg",
						  int(not dlg.do_not_show_again_cb.GetValue()))
			config.writecfg()
		dlg.do_not_show_again_cb.Bind(wx.EVT_CHECKBOX, do_not_show_again_handler)
		dlg.sizer3.Add(dlg.do_not_show_again_cb, flag=wx.TOP, border=12)
		dlg.Fit()
		dlg.Center(wx.BOTH)
		dlg.ok.SetDefault()
		dlg.ShowModalThenDestroy()
def main():
	parent_dir = os.path.dirname(os.path.dirname(os.path.abspath(sys.executable if isexe else __file__)))
	if not getattr(sys, "frozen", False):
		# Setup sys.path if running from source
		if os.path.exists(os.path.join(parent_dir, "dispcalGUI", "__init__.py")):
			sys.path.insert(0, parent_dir)
	from dispcalGUI.meta import version
	
	unknown_option = None
	for arg in sys.argv[1:]:
		if arg not in ("--help", "--force", "--verify", "--silent",
					   "--error-dialog" "-V", "--version"):
			unknown_option = arg
			break
	if "--help" in sys.argv[1:] or unknown_option:
		if unknown_option:
			print "%s: unrecognized option `%s'" % (os.path.basename(sys.argv[0]),
											 unknown_option)
		print "Usage: %s [OPTION]..." % os.path.basename(sys.argv[0])
		print "Apply profiles to configured display devices and load calibration"
		print "Version %s" % version
		print ""
		print "  --help           Output this help text and exit"
		print "  --force          Force loading of calibration/profile (if it has been"
		print "                   disabled in dispcalGUI.ini)"
		print "  --verify         Verify if calibration was loaded correctly"
		print "  --silent         Do not show dialog box on error"
		print "  --error-dialog   Force dialog box on error"
		print "  -V, --version    Output version information and exit"
	elif "-V" in sys.argv[1:] or "--version" in sys.argv[1:]:
		print "%s %s" % (os.path.basename(sys.argv[0]), version)
	else:
		if (sys.platform == "win32" and not "--force" in sys.argv[1:] and
			sys.getwindowsversion() >= (6, 1)):
			from dispcalGUI.util_win import calibration_management_isenabled
			if calibration_management_isenabled():
				# Early exit incase calibration loading is handled by Windows 7 and
				# isn't forced
				sys.exit()
		from dispcalGUI import config
		if getattr(sys, "frozen", False):
			# Add script parent directory to data directories if running frozen
			config.data_dirs.insert(0, parent_dir)
		config.initcfg()
		if (not "--force" in sys.argv[1:] and
			not config.getcfg("profile.load_on_login")):
			# Early exit incase profile loading has been disabled and isn't forced
			sys.exit()
		if "--error-dialog" in sys.argv[1:]:
			config.setcfg("profile_loader.error.show_msg", 1)
			config.writecfg()
		from dispcalGUI import localization as lang
		lang.init()
		apply_profiles_and_warn_on_error()
if __name__ == "__main__":
	main()
 |