sddm_upstream.patch 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747
  1. diff -Nuar sddm-0.11.0/ChangeLog sddm-master/ChangeLog
  2. --- sddm-0.11.0/ChangeLog 2014-11-20 17:47:24.000000000 +0200
  3. +++ sddm-master/ChangeLog 2015-03-08 18:18:48.000000000 +0200
  4. @@ -4,6 +4,10 @@
  5. - Bug fixes
  6. * Others
  7. +## 0.12.0 - XXXX-XX-XX
  8. +----------------------
  9. + * Add Arabic translation by Safa Alfulaij.
  10. +
  11. ## 0.11.0 - 2014-11-20
  12. ----------------------
  13. + Reload the configuration every time we start a new session
  14. @@ -15,7 +19,6 @@
  15. ## 0.10.0 - 2014-10-16
  16. ----------------------
  17. -
  18. + Set default icon theme from greeter theme configuration.
  19. + Set cursor theme according to greeter theme configuration.
  20. - Never permit a login as the sddm user (CVE-2014-7271)
  21. diff -Nuar sddm-0.11.0/CMakeLists.txt sddm-master/CMakeLists.txt
  22. --- sddm-0.11.0/CMakeLists.txt 2014-11-20 17:47:24.000000000 +0200
  23. +++ sddm-master/CMakeLists.txt 2015-03-08 18:18:48.000000000 +0200
  24. @@ -77,7 +77,9 @@
  25. # find qt5 imports dir
  26. get_target_property(QMAKE_EXECUTABLE Qt5::qmake LOCATION)
  27. -exec_program(${QMAKE_EXECUTABLE} ARGS "-query QT_INSTALL_QML" RETURN_VALUE return_code OUTPUT_VARIABLE QT_IMPORTS_DIR)
  28. +if(NOT QT_IMPORTS_DIR)
  29. + exec_program(${QMAKE_EXECUTABLE} ARGS "-query QT_INSTALL_QML" RETURN_VALUE return_code OUTPUT_VARIABLE QT_IMPORTS_DIR)
  30. +endif()
  31. # Set components version
  32. set(COMPONENTS_VERSION 2.0)
  33. @@ -98,7 +100,12 @@
  34. add_definitions(-DHAVE_SYSTEMD)
  35. set(CMAKE_AUTOMOC_MOC_OPTIONS -DHAVE_SYSTEMD)
  36. - pkg_check_modules(JOURNALD "libsystemd-journal")
  37. + # libsystemd-journal was merged into libsystemd in 209
  38. + if(${SYSTEMD_VERSION} VERSION_LESS 209)
  39. + pkg_check_modules(JOURNALD "libsystemd-journal")
  40. + else()
  41. + pkg_check_modules(JOURNALD "libsystemd")
  42. + endif()
  43. if(ENABLE_JOURNALD)
  44. if(JOURNALD_FOUND)
  45. @@ -109,8 +116,11 @@
  46. endif()
  47. endif()
  48. - execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} --variable=systemdsystemunitdir systemd OUTPUT_VARIABLE SYSTEMD_SYSTEM_UNIT_DIR)
  49. - string(REGEX REPLACE "[ \t\n]+" "" SYSTEMD_SYSTEM_UNIT_DIR ${SYSTEMD_SYSTEM_UNIT_DIR})
  50. + if (NOT DEFINED SYSTEMD_SYSTEM_UNIT_DIR)
  51. + execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} --variable=systemdsystemunitdir systemd OUTPUT_VARIABLE SYSTEMD_SYSTEM_UNIT_DIR)
  52. + string(REGEX REPLACE "[ \t\n]+" "" SYSTEMD_SYSTEM_UNIT_DIR ${SYSTEMD_SYSTEM_UNIT_DIR})
  53. + endif()
  54. +
  55. set(MINIMUM_VT 1)
  56. set(HALT_COMMAND "/usr/bin/systemctl poweroff")
  57. set(REBOOT_COMMAND "/usr/bin/systemctl reboot")
  58. diff -Nuar sddm-0.11.0/CONTRIBUTORS sddm-master/CONTRIBUTORS
  59. --- sddm-0.11.0/CONTRIBUTORS 2014-11-20 17:47:24.000000000 +0200
  60. +++ sddm-master/CONTRIBUTORS 2015-03-08 18:18:48.000000000 +0200
  61. @@ -43,3 +43,4 @@
  62. a.k.a. Harvey <teknocratdefunct@riseup.net>
  63. raffarti <raffarti@zoho.com>
  64. w41l <walecha99@gmail.com>
  65. +Sérgio Marques <smarquespt@gmail.com>
  66. diff -Nuar sddm-0.11.0/data/man/sddm.conf.rst.in sddm-master/data/man/sddm.conf.rst.in
  67. --- sddm-0.11.0/data/man/sddm.conf.rst.in 2014-11-20 17:47:24.000000000 +0200
  68. +++ sddm-master/data/man/sddm.conf.rst.in 2015-03-08 18:18:48.000000000 +0200
  69. @@ -65,6 +65,10 @@
  70. Path of the X server.
  71. Default value is "/usr/bin/X".
  72. +`XephyrPath=`
  73. + Path of the Xephyr.
  74. + Default value is "/usr/bin/Xephyr".
  75. +
  76. `XauthPath=`
  77. Path of the Xauth.
  78. Default value is "/usr/bin/xauth".
  79. @@ -104,11 +108,11 @@
  80. Default value is 65000.
  81. `HideUsers=`
  82. - Users that shouldn't show up in the user list.
  83. + Comma-separated list of Users that shouldn't show up in the user list.
  84. Default value is empty.
  85. `HideShells=`
  86. - Shells of users that shouldn't show up in the user list.
  87. + Comma-separated list of Shells of users that shouldn't show up in the user list.
  88. Default value is empty.
  89. `RememberLastUser=`
  90. diff -Nuar sddm-0.11.0/data/man/sddm.rst.in sddm-master/data/man/sddm.rst.in
  91. --- sddm-0.11.0/data/man/sddm.rst.in 2014-11-20 17:47:24.000000000 +0200
  92. +++ sddm-master/data/man/sddm.rst.in 2015-03-08 18:18:48.000000000 +0200
  93. @@ -25,9 +25,9 @@
  94. easily create pleasant, modern looking interfaces for sddm.
  95. sddm runs the greeter as a system user named **sddm**
  96. -whose home directory need to be set to **/var/lib/sddm**.
  97. +whose home directory needs to be set to **/var/lib/sddm**.
  98. -If pam and systemd are available, the greeter will go through logind
  99. +If pam and systemd are available, the greeter will go through logind,
  100. which will give it access to drm devices.
  101. Distributions without pam and systemd will need to put the **sddm** user
  102. diff -Nuar sddm-0.11.0/data/scripts/Xsession sddm-master/data/scripts/Xsession
  103. --- sddm-0.11.0/data/scripts/Xsession 2014-11-20 17:47:24.000000000 +0200
  104. +++ sddm-master/data/scripts/Xsession 2015-03-08 18:18:48.000000000 +0200
  105. @@ -20,9 +20,8 @@
  106. . $HOME/.profile
  107. fi
  108. ;;
  109. - */zsh)
  110. +*/zsh)
  111. [ -z "$ZSH_NAME" ] && exec $SHELL $0 "$@"
  112. - emulate -R sh
  113. [ -d /etc/zsh ] && zdir=/etc/zsh || zdir=/etc
  114. zhome=${ZDOTDIR:-$HOME}
  115. # zshenv is always sourced automatically.
  116. @@ -30,6 +29,7 @@
  117. [ -f $zhome/.zprofile ] && . $zhome/.zprofile
  118. [ -f $zdir/zlogin ] && . $zdir/zlogin
  119. [ -f $zhome/.zlogin ] && . $zhome/.zlogin
  120. + emulate -R sh
  121. ;;
  122. */csh|*/tcsh)
  123. # [t]cshrc is always sourced automatically.
  124. diff -Nuar sddm-0.11.0/data/translations/ar.ts sddm-master/data/translations/ar.ts
  125. --- sddm-0.11.0/data/translations/ar.ts 1970-01-01 02:00:00.000000000 +0200
  126. +++ sddm-master/data/translations/ar.ts 2015-03-08 18:18:48.000000000 +0200
  127. @@ -0,0 +1,59 @@
  128. +<?xml version="1.0" encoding="utf-8"?>
  129. +<!DOCTYPE TS>
  130. +<TS version="2.1" language="ar">
  131. +<context>
  132. + <name>TextConstants</name>
  133. + <message>
  134. + <source>Welcome to %1</source>
  135. + <translation>مرحبًا في %1</translation>
  136. + </message>
  137. + <message>
  138. + <source>Warning, Caps Lock is ON!</source>
  139. + <translation>تحذير، مفتاح Caps Lock ممكّن!</translation>
  140. + </message>
  141. + <message>
  142. + <source>Layout</source>
  143. + <translation>التّخطيط</translation>
  144. + </message>
  145. + <message>
  146. + <source>Login</source>
  147. + <translation>لِج</translation>
  148. + </message>
  149. + <message>
  150. + <source>Login failed</source>
  151. + <translation>فشل الولوج</translation>
  152. + </message>
  153. + <message>
  154. + <source>Login succeeded</source>
  155. + <translation>نجح الولوج</translation>
  156. + </message>
  157. + <message>
  158. + <source>Password</source>
  159. + <translation>كلمة المرور</translation>
  160. + </message>
  161. + <message>
  162. + <source>Enter your username and password</source>
  163. + <translation>أدخِل اسم المستخدم وكلمة مروره</translation>
  164. + </message>
  165. + <message>
  166. + <source>Reboot</source>
  167. + <translation>أعد الإقلاع</translation>
  168. + </message>
  169. + <message>
  170. + <source>Session</source>
  171. + <translation>الجلسة</translation>
  172. + </message>
  173. + <message>
  174. + <source>Shutdown</source>
  175. + <translation>أطفئ</translation>
  176. + </message>
  177. + <message>
  178. + <source>User name</source>
  179. + <translation>اسم المستخدم</translation>
  180. + </message>
  181. + <message>
  182. + <source>Select your user and enter password</source>
  183. + <translation>اختر مستخدمًا وأدخِل كلمة مروره</translation>
  184. + </message>
  185. +</context>
  186. +</TS>
  187. diff -Nuar sddm-0.11.0/data/translations/CMakeLists.txt sddm-master/data/translations/CMakeLists.txt
  188. --- sddm-0.11.0/data/translations/CMakeLists.txt 2014-11-20 17:47:24.000000000 +0200
  189. +++ sddm-master/data/translations/CMakeLists.txt 2015-03-08 18:18:48.000000000 +0200
  190. @@ -1,9 +1,11 @@
  191. set(TRANSLATION_FILES
  192. + ar.ts
  193. cs.ts
  194. de.ts
  195. et.ts
  196. fi.ts
  197. fr.ts
  198. + hu.ts
  199. it.ts
  200. ja.ts
  201. pl.ts
  202. diff -Nuar sddm-0.11.0/data/translations/hu.ts sddm-master/data/translations/hu.ts
  203. --- sddm-0.11.0/data/translations/hu.ts 1970-01-01 02:00:00.000000000 +0200
  204. +++ sddm-master/data/translations/hu.ts 2015-03-08 18:18:48.000000000 +0200
  205. @@ -0,0 +1,59 @@
  206. +<?xml version="1.0" encoding="utf-8"?>
  207. +<!DOCTYPE TS>
  208. +<TS version="2.1" language="hu">
  209. +<context>
  210. + <name>TextConstants</name>
  211. + <message>
  212. + <source>Welcome to %1</source>
  213. + <translation>Üdvözöljük - %1</translation>
  214. + </message>
  215. + <message>
  216. + <source>Warning, Caps Lock is ON!</source>
  217. + <translation>Figyelem: a Caps Lock BE van kapcsolva!</translation>
  218. + </message>
  219. + <message>
  220. + <source>Layout</source>
  221. + <translation>Nézet</translation>
  222. + </message>
  223. + <message>
  224. + <source>Login</source>
  225. + <translation>Bejelentkezés</translation>
  226. + </message>
  227. + <message>
  228. + <source>Login failed</source>
  229. + <translation>Bejelentkezés sikertelen</translation>
  230. + </message>
  231. + <message>
  232. + <source>Login succeeded</source>
  233. + <translation>Sikeres bejelentkezés</translation>
  234. + </message>
  235. + <message>
  236. + <source>Password</source>
  237. + <translation>Jelszó</translation>
  238. + </message>
  239. + <message>
  240. + <source>Enter your username and password</source>
  241. + <translation>Írja be a felhasználónevét és a jelszavát</translation>
  242. + </message>
  243. + <message>
  244. + <source>Reboot</source>
  245. + <translation>Újraindítás</translation>
  246. + </message>
  247. + <message>
  248. + <source>Session</source>
  249. + <translation>Munkamenet</translation>
  250. + </message>
  251. + <message>
  252. + <source>Shutdown</source>
  253. + <translation>Leállítás</translation>
  254. + </message>
  255. + <message>
  256. + <source>User name</source>
  257. + <translation>Felhasználónév</translation>
  258. + </message>
  259. + <message>
  260. + <source>Select your user and enter password</source>
  261. + <translation>Válassza ki a felhasználónevét és írja be a jelszavát</translation>
  262. + </message>
  263. +</context>
  264. +</TS>
  265. diff -Nuar sddm-0.11.0/data/translations/it.ts sddm-master/data/translations/it.ts
  266. --- sddm-0.11.0/data/translations/it.ts 2014-11-20 17:47:24.000000000 +0200
  267. +++ sddm-master/data/translations/it.ts 2015-03-08 18:18:48.000000000 +0200
  268. @@ -21,7 +21,7 @@
  269. </message>
  270. <message>
  271. <source>Login failed</source>
  272. - <translation>Accesso fallito</translation>
  273. + <translation>Accesso non riuscito</translation>
  274. </message>
  275. <message>
  276. <source>Login succeeded</source>
  277. diff -Nuar sddm-0.11.0/data/translations/pt_PT.ts sddm-master/data/translations/pt_PT.ts
  278. --- sddm-0.11.0/data/translations/pt_PT.ts 2014-11-20 17:47:24.000000000 +0200
  279. +++ sddm-master/data/translations/pt_PT.ts 2015-03-08 18:18:48.000000000 +0200
  280. @@ -5,11 +5,11 @@
  281. <name>TextConstants</name>
  282. <message>
  283. <source>Welcome to %1</source>
  284. - <translation>Bem-vindo a %1</translation>
  285. + <translation>Bem-vindo ao %1</translation>
  286. </message>
  287. <message>
  288. <source>Warning, Caps Lock is ON!</source>
  289. - <translation>Atenção, Caps Lock está ligada!</translation>
  290. + <translation>Atenção, Caps Lock está ativo!</translation>
  291. </message>
  292. <message>
  293. <source>Layout</source>
  294. @@ -17,15 +17,15 @@
  295. </message>
  296. <message>
  297. <source>Login</source>
  298. - <translation>Sessão</translation>
  299. + <translation>Autenticação</translation>
  300. </message>
  301. <message>
  302. <source>Login failed</source>
  303. - <translation>A autenticação falhou</translation>
  304. + <translation>Falha de autenticação</translation>
  305. </message>
  306. <message>
  307. <source>Login succeeded</source>
  308. - <translation>Autentificação com sucesso</translation>
  309. + <translation>Autenticação efetuada</translation>
  310. </message>
  311. <message>
  312. <source>Password</source>
  313. @@ -33,7 +33,7 @@
  314. </message>
  315. <message>
  316. <source>Enter your username and password</source>
  317. - <translation>Escreva o seu nome de utilizador e senha</translation>
  318. + <translation>Escreva o seu nome de utilizador e a senha</translation>
  319. </message>
  320. <message>
  321. <source>Reboot</source>
  322. diff -Nuar sddm-0.11.0/data/translations/tr.ts sddm-master/data/translations/tr.ts
  323. --- sddm-0.11.0/data/translations/tr.ts 2014-11-20 17:47:24.000000000 +0200
  324. +++ sddm-master/data/translations/tr.ts 2015-03-08 18:18:48.000000000 +0200
  325. @@ -5,7 +5,7 @@
  326. <name>TextConstants</name>
  327. <message>
  328. <source>Welcome to %1</source>
  329. - <translation>Hoşgeldiniz (%1)</translation>
  330. + <translation>Hoş Geldiniz (%1)</translation>
  331. </message>
  332. <message>
  333. <source>Warning, Caps Lock is ON!</source>
  334. @@ -29,11 +29,11 @@
  335. </message>
  336. <message>
  337. <source>Password</source>
  338. - <translation>Şifre</translation>
  339. + <translation>Parola</translation>
  340. </message>
  341. <message>
  342. <source>Enter your username and password</source>
  343. - <translation>Kullanıcı adınızı ve şifrenizi giriniz</translation>
  344. + <translation>Kullanıcı adınızı ve parolanızı giriniz</translation>
  345. </message>
  346. <message>
  347. <source>Reboot</source>
  348. @@ -53,7 +53,7 @@
  349. </message>
  350. <message>
  351. <source>Select your user and enter password</source>
  352. - <translation>Kullanıcınızı seçiniz ve şifrenizi giriniz</translation>
  353. + <translation>Kullanıcınızı seçiniz ve parolanızı giriniz</translation>
  354. </message>
  355. </context>
  356. </TS>
  357. diff -Nuar sddm-0.11.0/README.md sddm-master/README.md
  358. --- sddm-0.11.0/README.md 2014-11-20 17:47:24.000000000 +0200
  359. +++ sddm-master/README.md 2015-03-08 18:18:48.000000000 +0200
  360. @@ -2,7 +2,7 @@
  361. [![Build Status](https://travis-ci.org/sddm/sddm.svg?branch=master)](https://travis-ci.org/sddm/sddm)
  362. -SDDM is a modern display manager for X11 aiming to be fast, simple and beatiful. It uses modern technologies like QtQuick, which in turn gives the designer the ability to create smooth, animated user interfaces.
  363. +SDDM is a modern display manager for X11 aiming to be fast, simple and beautiful. It uses modern technologies like QtQuick, which in turn gives the designer the ability to create smooth, animated user interfaces.
  364. SDDM is extremely themeable. We put no restrictions on the user interface design, it is completely up to the designer. We simply provide a few callbacks to the user interface which can be used for authentication, suspend etc. To further ease theme creation we provide some premade components like a textbox, a combox etc.
  365. diff -Nuar sddm-0.11.0/src/common/Configuration.h sddm-master/src/common/Configuration.h
  366. --- sddm-0.11.0/src/common/Configuration.h 2014-11-20 17:47:24.000000000 +0200
  367. +++ sddm-master/src/common/Configuration.h 2015-03-08 18:18:48.000000000 +0200
  368. @@ -54,6 +54,7 @@
  369. // TODO: Not absolutely sure if everything belongs here. Xsessions, VT and probably some more seem universal
  370. Section(XDisplay,
  371. Entry(ServerPath, QString, _S("/usr/bin/X"), _S("X server path"));
  372. + Entry(XephyrPath, QString, _S("/usr/bin/Xephyr"), _S("Xephyr path"));
  373. Entry(XauthPath, QString, _S("/usr/bin/xauth"), _S("Xauth path"));
  374. Entry(SessionDir, QString, _S("/usr/share/xsessions"), _S("Session description directory"));
  375. Entry(SessionCommand, QString, _S(SESSION_COMMAND), _S("Xsession script path\n"
  376. diff -Nuar sddm-0.11.0/src/daemon/Display.cpp sddm-master/src/daemon/Display.cpp
  377. --- sddm-0.11.0/src/daemon/Display.cpp 2014-11-20 17:47:24.000000000 +0200
  378. +++ sddm-master/src/daemon/Display.cpp 2015-03-08 18:18:48.000000000 +0200
  379. @@ -40,8 +40,8 @@
  380. #include <unistd.h>
  381. namespace SDDM {
  382. - Display::Display(const int displayId, const int terminalId, Seat *parent) : QObject(parent),
  383. - m_displayId(displayId), m_terminalId(terminalId),
  384. + Display::Display(const int terminalId, Seat *parent) : QObject(parent),
  385. + m_terminalId(terminalId),
  386. m_auth(new Auth(this)),
  387. m_displayServer(new XorgDisplayServer(this)),
  388. m_seat(parent),
  389. @@ -73,8 +73,8 @@
  390. stop();
  391. }
  392. - const int Display::displayId() const {
  393. - return m_displayId;
  394. + QString Display::displayId() const {
  395. + return m_displayServer->display();
  396. }
  397. const int Display::terminalId() const {
  398. diff -Nuar sddm-0.11.0/src/daemon/Display.h sddm-master/src/daemon/Display.h
  399. --- sddm-0.11.0/src/daemon/Display.h 2014-11-20 17:47:24.000000000 +0200
  400. +++ sddm-master/src/daemon/Display.h 2015-03-08 18:18:48.000000000 +0200
  401. @@ -39,10 +39,10 @@
  402. Q_OBJECT
  403. Q_DISABLE_COPY(Display)
  404. public:
  405. - explicit Display(const int displayId, const int terminalId, Seat *parent);
  406. + explicit Display(int terminalId, Seat *parent);
  407. ~Display();
  408. - const int displayId() const;
  409. + QString displayId() const;
  410. const int terminalId() const;
  411. const QString &name() const;
  412. @@ -71,7 +71,6 @@
  413. bool m_relogin { true };
  414. bool m_started { false };
  415. - int m_displayId { 0 };
  416. int m_terminalId { 7 };
  417. QString m_passPhrase;
  418. diff -Nuar sddm-0.11.0/src/daemon/Seat.cpp sddm-master/src/daemon/Seat.cpp
  419. --- sddm-0.11.0/src/daemon/Seat.cpp 2014-11-20 17:47:24.000000000 +0200
  420. +++ sddm-master/src/daemon/Seat.cpp 2015-03-08 18:18:48.000000000 +0200
  421. @@ -51,36 +51,25 @@
  422. return m_name;
  423. }
  424. - void Seat::createDisplay(int displayId, int terminalId) {
  425. + void Seat::createDisplay(int terminalId) {
  426. //reload config if needed
  427. mainConfig.load();
  428. - if (displayId == -1) {
  429. - // find unused display
  430. - displayId = findUnused(0, [&](const int number) {
  431. - bool alreadyExists = m_displayIds.contains(number);
  432. - if (!alreadyExists)
  433. - alreadyExists = XorgDisplayServer::displayExists(number);
  434. - return alreadyExists;
  435. - });
  436. -
  437. - // find unused terminal
  438. + if (terminalId == -1) {
  439. + // find unused terminal
  440. terminalId = findUnused(mainConfig.XDisplay.MinimumVT.get(), [&](const int number) {
  441. return m_terminalIds.contains(number);
  442. });
  443. }
  444. - // mark display as used
  445. - m_displayIds << displayId;
  446. -
  447. // mark terminal as used
  448. m_terminalIds << terminalId;
  449. // log message
  450. - qDebug() << "Adding new display" << displayId << "on vt" << terminalId << "...";
  451. + qDebug() << "Adding new display" << "on vt" << terminalId << "...";
  452. // create a new display
  453. - Display *display = new Display(displayId, terminalId, this);
  454. + Display *display = new Display(terminalId, this);
  455. // restart display on stop
  456. connect(display, SIGNAL(stopped()), this, SLOT(displayStopped()));
  457. @@ -92,26 +81,14 @@
  458. display->start();
  459. }
  460. - void Seat::removeDisplay(int displayId) {
  461. - qDebug() << "Removing display" << displayId << "...";
  462. -
  463. - // display object
  464. - Display *display = nullptr;
  465. + void Seat::removeDisplay(Display* display) {
  466. + qDebug() << "Removing display" << display->displayId() << "...";
  467. - // find display
  468. - for (Display *d: m_displays)
  469. - if (d->displayId() == displayId)
  470. - display = d;
  471. -
  472. - // check if found
  473. - if (display == nullptr)
  474. - return;
  475. // remove display from list
  476. m_displays.removeAll(display);
  477. // mark display and terminal ids as unused
  478. - m_displayIds.removeAll(display->displayId());
  479. m_terminalIds.removeAll(display->terminalId());
  480. // stop the display
  481. @@ -127,7 +104,7 @@
  482. Display *display = qobject_cast<Display *>(sender());
  483. // remove display
  484. - removeDisplay(display->displayId());
  485. + removeDisplay(display);
  486. // restart otherwise
  487. if (m_displays.isEmpty())
  488. diff -Nuar sddm-0.11.0/src/daemon/Seat.h sddm-master/src/daemon/Seat.h
  489. --- sddm-0.11.0/src/daemon/Seat.h 2014-11-20 17:47:24.000000000 +0200
  490. +++ sddm-master/src/daemon/Seat.h 2015-03-08 18:18:48.000000000 +0200
  491. @@ -34,8 +34,8 @@
  492. const QString &name() const;
  493. public slots:
  494. - void createDisplay(int displayId = -1, int terminalId = -1);
  495. - void removeDisplay(int displayId);
  496. + void createDisplay(int terminalId = -1);
  497. + void removeDisplay(SDDM::Display* display);
  498. private slots:
  499. void displayStopped();
  500. @@ -45,7 +45,6 @@
  501. QList<Display *> m_displays;
  502. QList<int> m_terminalIds;
  503. - QList<int> m_displayIds;
  504. };
  505. }
  506. diff -Nuar sddm-0.11.0/src/daemon/Utils.h sddm-master/src/daemon/Utils.h
  507. --- sddm-0.11.0/src/daemon/Utils.h 2014-11-20 17:47:24.000000000 +0200
  508. +++ sddm-master/src/daemon/Utils.h 2015-03-08 18:18:48.000000000 +0200
  509. @@ -21,6 +21,8 @@
  510. #ifndef SDDM_UTILS_H
  511. #define SDDM_UTILS_H
  512. +#include <random>
  513. +
  514. namespace SDDM {
  515. inline QString generateName(int length) {
  516. diff -Nuar sddm-0.11.0/src/daemon/XorgDisplayServer.cpp sddm-master/src/daemon/XorgDisplayServer.cpp
  517. --- sddm-0.11.0/src/daemon/XorgDisplayServer.cpp 2014-11-20 17:47:24.000000000 +0200
  518. +++ sddm-master/src/daemon/XorgDisplayServer.cpp 2015-03-08 18:18:48.000000000 +0200
  519. @@ -28,6 +28,9 @@
  520. #include <QDebug>
  521. #include <QFile>
  522. #include <QProcess>
  523. +#include <QUuid>
  524. +
  525. +#include <random>
  526. #include <xcb/xcb.h>
  527. @@ -36,9 +39,6 @@
  528. namespace SDDM {
  529. XorgDisplayServer::XorgDisplayServer(Display *parent) : DisplayServer(parent) {
  530. - // figure out the X11 display
  531. - m_display = QString(":%1").arg(displayPtr()->displayId());
  532. -
  533. // get auth directory
  534. QString authDir = RUNTIME_DIR;
  535. @@ -50,7 +50,7 @@
  536. QDir().mkpath(authDir);
  537. // set auth path
  538. - m_authPath = QString("%1/%2").arg(authDir).arg(m_display);
  539. + m_authPath = QString("%1/%2").arg(authDir).arg(QUuid::createUuid().toString());
  540. // generate cookie
  541. std::random_device rd;
  542. @@ -70,10 +70,6 @@
  543. stop();
  544. }
  545. - bool XorgDisplayServer::displayExists(int number) {
  546. - return QFile(QString("/tmp/.X%1-lock").arg(number)).exists();
  547. - }
  548. -
  549. const QString &XorgDisplayServer::display() const {
  550. return m_display;
  551. }
  552. @@ -136,44 +132,72 @@
  553. if (daemonApp->testing()) {
  554. QStringList args;
  555. args << m_display << "-ac" << "-br" << "-noreset" << "-screen" << "800x600";
  556. - process->start("/usr/bin/Xephyr", args);
  557. + process->start(mainConfig.XDisplay.XephyrPath.get(), args);
  558. +
  559. +
  560. + // wait for display server to start
  561. + if (!process->waitForStarted()) {
  562. + // log message
  563. + qCritical() << "Failed to start display server process.";
  564. +
  565. + // return fail
  566. + return false;
  567. + }
  568. + emit started();
  569. } else {
  570. // set process environment
  571. QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
  572. - env.insert("DISPLAY", m_display);
  573. - env.insert("XAUTHORITY", m_authPath);
  574. env.insert("XCURSOR_THEME", mainConfig.Theme.CursorTheme.get());
  575. process->setProcessEnvironment(env);
  576. - // tell the display server to notify us when we can connect
  577. - SignalHandler::ignoreSigusr1();
  578. + //create pipe for communicating with X server
  579. + //0 == read from X, 1== write to from X
  580. + int pipeFds[2];
  581. + if (pipe(pipeFds) != 0) {
  582. + qCritical("Could not create pipe to start X server");
  583. + }
  584. // start display server
  585. QStringList args;
  586. - args << m_display
  587. - << "-auth" << m_authPath
  588. + args << "-auth" << m_authPath
  589. << "-nolisten" << "tcp"
  590. << "-background" << "none"
  591. << "-noreset"
  592. + << "-displayfd" << QString::number(pipeFds[1])
  593. << QString("vt%1").arg(displayPtr()->terminalId());
  594. qDebug() << "Running:"
  595. << qPrintable(mainConfig.XDisplay.ServerPath.get())
  596. << qPrintable(args.join(" "));
  597. process->start(mainConfig.XDisplay.ServerPath.get(), args);
  598. - SignalHandler::initializeSigusr1();
  599. - connect(DaemonApp::instance()->signalHandler(), SIGNAL(sigusr1Received()), this, SIGNAL(started()));
  600. - }
  601. - // wait for display server to start
  602. - if (!process->waitForStarted()) {
  603. - // log message
  604. - qCritical() << "Failed to start display server process.";
  605. + // wait for display server to start
  606. + if (!process->waitForStarted()) {
  607. + // log message
  608. + qCritical() << "Failed to start display server process.";
  609. +
  610. + // return fail
  611. + close(pipeFds[0]);
  612. + return false;
  613. + }
  614. +
  615. + QFile readPipe;
  616. +
  617. + if (!readPipe.open(pipeFds[0], QIODevice::ReadOnly)) {
  618. + qCritical("Failed to open pipe to start X Server ");
  619. +
  620. + close(pipeFds[0]);
  621. + return false;
  622. + }
  623. + QByteArray displayNumber = readPipe.readLine();
  624. + displayNumber.prepend(QByteArray(":"));
  625. + displayNumber.remove(displayNumber.size() -1, 1); //trim trailing whitespace
  626. + m_display= displayNumber;
  627. +
  628. + // close our pipe
  629. + close(pipeFds[0]);
  630. - // return fail
  631. - return false;
  632. - }
  633. - if (daemonApp->testing())
  634. emit started();
  635. + }
  636. // set flag
  637. m_started = true;
  638. diff -Nuar sddm-0.11.0/src/daemon/XorgDisplayServer.h sddm-master/src/daemon/XorgDisplayServer.h
  639. --- sddm-0.11.0/src/daemon/XorgDisplayServer.h 2014-11-20 17:47:24.000000000 +0200
  640. +++ sddm-master/src/daemon/XorgDisplayServer.h 2015-03-08 18:18:48.000000000 +0200
  641. @@ -33,8 +33,6 @@
  642. explicit XorgDisplayServer(Display *parent);
  643. ~XorgDisplayServer();
  644. - static bool displayExists(int number);
  645. -
  646. const QString &display() const;
  647. const QString &authPath() const;
  648. diff -Nuar sddm-0.11.0/src/greeter/SessionModel.cpp sddm-master/src/greeter/SessionModel.cpp
  649. --- sddm-0.11.0/src/greeter/SessionModel.cpp 2014-11-20 17:47:24.000000000 +0200
  650. +++ sddm-master/src/greeter/SessionModel.cpp 2015-03-08 18:18:48.000000000 +0200
  651. @@ -57,6 +57,7 @@
  652. continue;
  653. SessionPtr si { new Session { session, "", "", "" } };
  654. QTextStream in(&inputFile);
  655. + bool execAllowed = true;
  656. while (!in.atEnd()) {
  657. QString line = in.readLine();
  658. if (line.startsWith("Name="))
  659. @@ -65,9 +66,15 @@
  660. si->exec = line.mid(5);
  661. if (line.startsWith("Comment="))
  662. si->comment = line.mid(8);
  663. + if (line.startsWith("TryExec=")) {
  664. + QFileInfo fi(line.mid(8));
  665. + if (!fi.exists() || !fi.isExecutable())
  666. + execAllowed = false;
  667. + }
  668. }
  669. // add to sessions list
  670. - d->sessions.push_back(si);
  671. + if (execAllowed)
  672. + d->sessions.push_back(si);
  673. // close file
  674. inputFile.close();
  675. }
  676. diff -Nuar sddm-0.11.0/src/helper/backend/PamBackend.cpp sddm-master/src/helper/backend/PamBackend.cpp
  677. --- sddm-0.11.0/src/helper/backend/PamBackend.cpp 2014-11-20 17:47:24.000000000 +0200
  678. +++ sddm-master/src/helper/backend/PamBackend.cpp 2015-03-08 18:18:48.000000000 +0200
  679. @@ -251,7 +251,9 @@
  680. QProcessEnvironment sessionEnv = m_app->session()->processEnvironment();
  681. QString display = sessionEnv.value("DISPLAY");
  682. if (!display.isEmpty()) {
  683. +#ifdef PAM_XDISPLAY
  684. m_pam->setItem(PAM_XDISPLAY, qPrintable(display));
  685. +#endif
  686. m_pam->setItem(PAM_TTY, qPrintable(display));
  687. }
  688. if (!m_pam->putEnv(sessionEnv)) {