diff --git a/abstractlocker.cpp b/abstractlocker.cpp index a01cb8e..0239ac2 100644 --- a/abstractlocker.cpp +++ b/abstractlocker.cpp @@ -1,126 +1,126 @@ /******************************************************************** KSld - the KDE Screenlocker Daemon This file is part of the KDE project. Copyright (C) 1999 Martin R. Jones Copyright (C) 2002 Luboš Luňák Copyright (C) 2003 Oswald Buddenhagen Copyright (C) 2008 Chani Armitage Copyright (C) 2011 Martin Gräßlin Copyright (C) 2015 Bhushan Shah This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . *********************************************************************/ #include "abstractlocker.h" #include #include #include -#include +#include #include namespace ScreenLocker { BackgroundWindow::BackgroundWindow(AbstractLocker *lock) : QRasterWindow() , m_lock(lock) { setFlags(Qt::X11BypassWindowManagerHint | Qt::FramelessWindowHint); setProperty("org_kde_ksld_emergency", true); } BackgroundWindow::~BackgroundWindow() = default; void BackgroundWindow::paintEvent(QPaintEvent* ) { QPainter p(this); p.fillRect(0, 0, width(), height(), Qt::black); if (m_greeterFailure) { auto text = ki18n("The screen locker is broken and unlocking is not possible anymore.\n" "In order to unlock it either ConsoleKit or LoginD is needed, none of\n" "which could be found on your system."); auto text_ck = ki18n("The screen locker is broken and unlocking is not possible anymore.\n" "In order to unlock switch to a virtual terminal (e.g. Ctrl+Alt+F2),\n" "log in as root and execute the command:\n\n" "# ck-unlock-session \n\n"); auto text_ld = ki18n("The screen locker is broken and unlocking is not possible anymore.\n" "In order to unlock switch to a virtual terminal (e.g. Ctrl+Alt+F2),\n" "log in and execute the command:\n\n" "loginctl unlock-session %1\n\n" "Afterwards switch back to the running session (Ctrl+Alt+F%2)."); auto haveService = [](QString service){return QDBusConnection::systemBus().interface()->isServiceRegistered(service);}; if (haveService(QStringLiteral("org.freedesktop.ConsoleKit"))) { text = text_ck; } else if (haveService(QStringLiteral("org.freedesktop.login1"))) { text = text_ld; text = text.subs(QString::fromLocal8Bit(qgetenv("XDG_SESSION_ID"))); text = text.subs(QString::fromLocal8Bit(qgetenv("XDG_VTNR"))); } p.setPen(Qt::white); QFont f = p.font(); f.setBold(true); f.setPointSize(24); // for testing emergency mode, we need to disable antialias, as otherwise // screen wouldn't be completely black and white. if (qEnvironmentVariableIsSet("KSLD_TESTMODE")) { f.setStyleStrategy(QFont::NoAntialias); } p.setFont(f); const auto screens = QGuiApplication::screens(); for (auto s : screens) { p.drawText(s->geometry(), Qt::AlignVCenter | Qt::AlignHCenter, text.toString()); } } m_lock->stayOnTop(); } void BackgroundWindow::emergencyShow() { m_greeterFailure = true; update(); show(); } AbstractLocker::AbstractLocker(QObject *parent) : QObject(parent) { if (qobject_cast(QCoreApplication::instance())) { m_background.reset(new BackgroundWindow(this)); } } AbstractLocker::~AbstractLocker() { } void AbstractLocker::emergencyShow() { if (m_background.isNull()) { return; } m_background->emergencyShow(); } void AbstractLocker::addAllowedWindow(quint32 windows) { Q_UNUSED(windows); } } diff --git a/greeter/seccomp_filter.cpp b/greeter/seccomp_filter.cpp index b4d0d46..bca3001 100644 --- a/greeter/seccomp_filter.cpp +++ b/greeter/seccomp_filter.cpp @@ -1,141 +1,142 @@ /******************************************************************** KSld - the KDE Screenlocker Daemon This file is part of the KDE project. Copyright (C) 2017 Martin Gräßlin This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License or (at your option) version 3 or any later version accepted by the membership of KDE e.V. (or its successor approved by the membership of KDE e.V.), which shall act as a proxy defined in Section 14 of version 3 of the license. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . *********************************************************************/ #include "seccomp_filter.h" #include "kwinglplatform.h" #include #include #include #include #include #include #include +#include namespace ScreenLocker { namespace SecComp { void init() { // trigger OpenGL context creation // we need this to ensure that all required files are opened for write // on NVIDIA we need to keep write around, otherwise BUG 384005 happens bool writeSupported = true; // Mesa's software renderers create buffers in $XDG_RUNTIME_DIR on wayland bool createSupported = true; QScopedPointer dummySurface(new QOffscreenSurface); dummySurface->create(); QOpenGLContext dummyGlContext; if (dummyGlContext.create()) { if (dummyGlContext.makeCurrent(dummySurface.data())) { auto gl = KWin::GLPlatform::instance(); gl->detect(); gl->printResults(); if (gl->driver() == KWin::Driver_NVidia) { // BUG: 384005 writeSupported = false; } else if (gl->isSoftwareEmulation() && KWindowSystem::isPlatformWayland()) { createSupported = writeSupported = false; } } } // access DBus to have the socket open QDBusConnection::sessionBus(); // default action: allow // we cannot use a whitelist approach of syscalls // Qt, OpenGL, DBus just need to much and too broad auto context = seccomp_init(SCMP_ACT_ALLOW); if (!context) { return; } // add a filter to prevent that the password gets written to a file // we cannot disallow write syscall. That one is needed to wake up threads // Qt and OpenGL might create additional threads and then it would fail as we have an fd which // is not allowed to write to // instead disallow opening new files for writing // they should fail with EPERM error if (writeSupported) { seccomp_rule_add(context, SCMP_ACT_ERRNO(EPERM), SCMP_SYS(open), 1, SCMP_A1(SCMP_CMP_MASKED_EQ, O_WRONLY, O_WRONLY)); seccomp_rule_add(context, SCMP_ACT_ERRNO(EPERM), SCMP_SYS(open), 1, SCMP_A1(SCMP_CMP_MASKED_EQ, O_RDWR, O_RDWR)); seccomp_rule_add(context, SCMP_ACT_ERRNO(EPERM), SCMP_SYS(openat), 1, SCMP_A2(SCMP_CMP_MASKED_EQ, O_WRONLY, O_WRONLY)); seccomp_rule_add(context, SCMP_ACT_ERRNO(EPERM), SCMP_SYS(openat), 1, SCMP_A2(SCMP_CMP_MASKED_EQ, O_RDWR, O_RDWR)); } if (createSupported) { seccomp_rule_add(context, SCMP_ACT_ERRNO(EPERM), SCMP_SYS(openat), 1, SCMP_A2(SCMP_CMP_MASKED_EQ, O_CREAT, O_CREAT)); seccomp_rule_add(context, SCMP_ACT_ERRNO(EPERM), SCMP_SYS(open), 1, SCMP_A1(SCMP_CMP_MASKED_EQ, O_CREAT, O_CREAT)); seccomp_rule_add(context, SCMP_ACT_ERRNO(EPERM), SCMP_SYS(open_by_handle_at), 1, SCMP_A2(SCMP_CMP_MASKED_EQ, O_WRONLY, O_WRONLY)); seccomp_rule_add(context, SCMP_ACT_ERRNO(EPERM), SCMP_SYS(open_by_handle_at), 1, SCMP_A2(SCMP_CMP_MASKED_EQ, O_RDWR, O_RDWR)); seccomp_rule_add(context, SCMP_ACT_ERRNO(EPERM), SCMP_SYS(open_by_handle_at), 1, SCMP_A2(SCMP_CMP_MASKED_EQ, O_CREAT, O_CREAT)); seccomp_rule_add(context, SCMP_ACT_ERRNO(EPERM), SCMP_SYS(creat), 0); } // Disallow everything which modifies the filesystem. An attacker could store the password as a directory name or encode it in chmod bits. // Also prevent deleting anything, to prevent an attacker from deleting the users files. seccomp_rule_add(context, SCMP_ACT_ERRNO(EPERM), SCMP_SYS(truncate), 0); seccomp_rule_add(context, SCMP_ACT_ERRNO(EPERM), SCMP_SYS(rename), 0); seccomp_rule_add(context, SCMP_ACT_ERRNO(EPERM), SCMP_SYS(renameat), 0); seccomp_rule_add(context, SCMP_ACT_ERRNO(EPERM), SCMP_SYS(renameat2), 0); seccomp_rule_add(context, SCMP_ACT_ERRNO(EPERM), SCMP_SYS(mkdir), 0); seccomp_rule_add(context, SCMP_ACT_ERRNO(EPERM), SCMP_SYS(mkdirat), 0); seccomp_rule_add(context, SCMP_ACT_ERRNO(EPERM), SCMP_SYS(rmdir), 0); seccomp_rule_add(context, SCMP_ACT_ERRNO(EPERM), SCMP_SYS(link), 0); seccomp_rule_add(context, SCMP_ACT_ERRNO(EPERM), SCMP_SYS(linkat), 0); seccomp_rule_add(context, SCMP_ACT_ERRNO(EPERM), SCMP_SYS(unlink), 0); seccomp_rule_add(context, SCMP_ACT_ERRNO(EPERM), SCMP_SYS(unlinkat), 0); seccomp_rule_add(context, SCMP_ACT_ERRNO(EPERM), SCMP_SYS(symlink), 0); seccomp_rule_add(context, SCMP_ACT_ERRNO(EPERM), SCMP_SYS(symlinkat), 0); seccomp_rule_add(context, SCMP_ACT_ERRNO(EPERM), SCMP_SYS(mknod), 0); seccomp_rule_add(context, SCMP_ACT_ERRNO(EPERM), SCMP_SYS(mknodat), 0); seccomp_rule_add(context, SCMP_ACT_ERRNO(EPERM), SCMP_SYS(chmod), 0); seccomp_rule_add(context, SCMP_ACT_ERRNO(EPERM), SCMP_SYS(fchmod), 0); seccomp_rule_add(context, SCMP_ACT_ERRNO(EPERM), SCMP_SYS(fchmodat), 0); // disallow going to a socket seccomp_rule_add(context, SCMP_ACT_ERRNO(EPERM), SCMP_SYS(socket), 0); // disallow fork+exec // note glibc seems to use clone which is allowed for threads seccomp_rule_add(context, SCMP_ACT_ERRNO(EPERM), SCMP_SYS(fork), 0); seccomp_rule_add(context, SCMP_ACT_ERRNO(EPERM), SCMP_SYS(vfork), 0); seccomp_rule_add(context, SCMP_ACT_ERRNO(EPERM), SCMP_SYS(execve), 0); seccomp_rule_add(context, SCMP_ACT_ERRNO(EPERM), SCMP_SYS(execveat), 0); // disallow pipe, that should destroy copy and paste on Wayland seccomp_rule_add(context, SCMP_ACT_ERRNO(EPERM), SCMP_SYS(pipe), 0); seccomp_rule_add(context, SCMP_ACT_ERRNO(EPERM), SCMP_SYS(pipe2), 0); // and activate our rules seccomp_load(context); seccomp_release(context); } } } diff --git a/kcm/screenlocker.desktop b/kcm/screenlocker.desktop index e2314e2..8a445eb 100644 --- a/kcm/screenlocker.desktop +++ b/kcm/screenlocker.desktop @@ -1,126 +1,127 @@ [Desktop Entry] Type=Service X-KDE-ServiceTypes=KCModule Icon=preferences-system Exec=kcmshell5 screenlocker X-KDE-Library=screenlocker_kcm X-KDE-ParentApp=kcontrol X-DocPath=kcontrol/screenlocker/index.html X-KDE-System-Settings-Parent-Category=desktopbehavior X-KDE-Weight=60 Name=Screen Locking Name[ca]=Bloqueig de la pantalla Name[ca@valencia]=Bloqueig de la pantalla Name[cs]=Uzamykání obrazovky Name[da]=Skærmlås Name[de]=Bildschirmsperre Name[el]=Κλείδωμα οθόνης Name[en_GB]=Screen Locking Name[es]=Bloqueo de pantalla Name[et]=Ekraani lukustamine Name[eu]=Pantaila giltzatzea Name[fi]=Näytön lukitus Name[fr]=Verrouillage de l'écran Name[gl]=Trancar a pantalla Name[he]=נעילת מסך Name[hu]=Képernyőzárolás -Name[id]=Screen Locking +Name[id]=Penguncian Layar Name[it]=Blocco dello schermo Name[ja]=スクリーンロック Name[ko]=화면 잠금 Name[nb]=Skjermlåsing Name[nl]=Scherm vergrendelen Name[nn]=Skjerm­låsing Name[pa]=ਸਕਰੀਨ ਲਾਕ Name[pl]=Blokada ekranu Name[pt]=Bloqueio do Ecrã Name[pt_BR]=Bloqueio de tela Name[ru]=Блокировка экрана Name[sk]=Zamykanie obrazovky Name[sl]=Zaklep zaslona Name[sr]=Закључавање екрана Name[sr@ijekavian]=Закључавање екрана Name[sr@ijekavianlatin]=Zaključavanje ekrana Name[sr@latin]=Zaključavanje ekrana Name[sv]=Skärmlåsning Name[tr]=Ekran Kilitleme Name[uk]=Блокування екрана Name[x-test]=xxScreen Lockingxx Name[zh_CN]=锁屏 Name[zh_TW]=螢幕鎖定 Comment=Configure Screen Locking Comment[ca]=Configura el bloqueig de pantalla Comment[ca@valencia]=Configura el bloqueig de pantalla Comment[cs]=Nastavit uzamykání obrazovky Comment[da]=Indstil skærmlås Comment[de]=Bildschirmsperre einrichten +Comment[el]=Ρύθμιση κλειδώματος οθόνης Comment[en_GB]=Configure Screen Locking Comment[es]=Configurar el bloqueo de pantalla Comment[eu]=Konfiguratu pantaila giltzatzea Comment[fi]=Näytön lukituksen asetukset Comment[fr]=Configurer le verrouillage de l'écran Comment[gl]=Configurar o trancamento da pantalla. Comment[hu]=Képernyőzárolás beállítása Comment[id]=Konfigurasi Penguncian Layar Comment[it]=Configura il blocco dello schermo Comment[ko]=화면 잠금 설정 Comment[nl]=Schermvergrendeling configureren Comment[nn]=Set opp skjermlåsing Comment[pa]=ਸਕਰੀਨ ਲਾਕ ਸੰਰਚਨਾ Comment[pl]=Ustawienia blokady ekranu Comment[pt]=Configurar o Bloqueio do Ecrã Comment[pt_BR]=Configurar bloqueio de tela Comment[ru]=Настройка блокировщика экрана Comment[sk]=Nastaviť zamykanie obrazovky Comment[sl]=Nastavi zaklep zaslona Comment[sr]=Подесите закључавање екрана Comment[sr@ijekavian]=Подесите закључавање екрана Comment[sr@ijekavianlatin]=Podesite zaključavanje ekrana Comment[sr@latin]=Podesite zaključavanje ekrana Comment[sv]=Anpassa skärmlåsning Comment[tr]=Ekran Kilitlemeyi Yapılandır Comment[uk]=Налаштування блокування екрана Comment[x-test]=xxConfigure Screen Lockingxx Comment[zh_CN]=配置屏幕锁定 Comment[zh_TW]=設定螢幕鎖定 X-KDE-Keywords=lock,resume, screensaver, screenlock X-KDE-Keywords[ca]=bloqueig,reprendre,estalvi de pantalla,bloqueig de pantalla X-KDE-Keywords[ca@valencia]=bloqueig,reprendre,estalvi de pantalla,bloqueig de pantalla X-KDE-Keywords[cs]=zamknout,pokračovat, spořič, zámek X-KDE-Keywords[da]=lås,genoptag,pauseskærm,skærmlås X-KDE-Keywords[de]=Sperren,Sperre aufheben,Bildschirmschoner,Bildschirmsperre X-KDE-Keywords[el]=κλείδωμα,συνέχιση,προφύλαξη οθόνης,κλείδωμα οθόνης X-KDE-Keywords[en_GB]=lock,resume, screensaver, screenlock X-KDE-Keywords[es]=bloquear, reanudar, salvapantallas, bloqueo de pantalla X-KDE-Keywords[et]=lukustamine,taastamine,ekraanisäästja,ekraani lukustamine X-KDE-Keywords[eu]=giltzatu,berrekin,pantaila-babesle,pantaila-giltzatu X-KDE-Keywords[fi]=lock,resume, screensaver, screenlock, lukko, lukitseminen, herääminen, näytönsäästäjä, näyttölukko, lukitusnäyttö X-KDE-Keywords[fr]=verrouiller, reprendre,écran de veille, verrouillage de l'écran X-KDE-Keywords[gl]=bloquear,desbloquear,salvapantallas,bloqueo de pantalla X-KDE-Keywords[he]=lock,resume, screensaver, screenlock,נעילה,שומר מסך,נעילת מסך X-KDE-Keywords[hu]=zárolás,feloldás,képernyővédő,képernyőzár X-KDE-Keywords[id]=lock,resume, screensaver, screenlock X-KDE-Keywords[it]=blocca, riprendi, salvaschermo, blocco dello schermo X-KDE-Keywords[ja]=ロック,再開,スクリーンセーバー,スクリーンロック X-KDE-Keywords[ko]=lock,resume, screensaver, screenlock,잠금,다시 시작,화면 보호기,화면 잠금 X-KDE-Keywords[nl]=grendel,hervatten, schermbeveiliging, schermbeveiliging X-KDE-Keywords[nn]=lås,låsing,framhald,skjermsparar,pauseskjerm,skjermlås X-KDE-Keywords[pa]=ਲਾਕ, ਮੁੜ-ਪ੍ਰਾਪਤ, ਸਕਰੀਨ-ਸੇਵਰ, ਸਕਰੀਨ-ਲਾਕ X-KDE-Keywords[pl]=blokada, wznowienie, wygaszacz ekranu, blokada ekranu X-KDE-Keywords[pt]=bloquear,retomar,protector de ecrã,bloqueio do ecrã X-KDE-Keywords[pt_BR]=bloquear,continuar,retornar,protetor de tela,bloqueio de tela X-KDE-Keywords[ru]=блокировщик экрана,экранная заставка,заставка,возобновление работы X-KDE-Keywords[sk]=zamknúť,obnoviť,šetrič obrazovky,zamknutie obrazovky X-KDE-Keywords[sl]=zaklep,nadaljevanje,ohranjevalnik zaslona,zaklep zaslona X-KDE-Keywords[sr]=lock,resume,screensaver,screenlock,закључавање,настављање,чувар екрана X-KDE-Keywords[sr@ijekavian]=lock,resume,screensaver,screenlock,закључавање,настављање,чувар екрана X-KDE-Keywords[sr@ijekavianlatin]=lock,resume,screensaver,screenlock,zaključavanje,nastavljanje,čuvar ekrana X-KDE-Keywords[sr@latin]=lock,resume,screensaver,screenlock,zaključavanje,nastavljanje,čuvar ekrana X-KDE-Keywords[sv]=lås,återuppta,skärmsläckare,skärmlåsning X-KDE-Keywords[tr]=kilitle,devam et,ekran koruyucu,ekran kilidi X-KDE-Keywords[uk]=lock,resume,screensaver,screenlock,блокування,замикання,відновлення,зберігач екрана,екран,блокування екрана X-KDE-Keywords[x-test]=xxlockxx,xxresumexx,xx screensaverxx,xx screenlockxx X-KDE-Keywords[zh_CN]=lock,resume, screensaver, screenlock,锁屏,恢复,屏幕保护,屏幕锁定 X-KDE-Keywords[zh_TW]=lock,resume, screensaver, screenlock diff --git a/kscreenlocker.notifyrc b/kscreenlocker.notifyrc index 571f1f1..ed924ee 100644 --- a/kscreenlocker.notifyrc +++ b/kscreenlocker.notifyrc @@ -1,218 +1,218 @@ [Global] IconName=system-lock-screen Comment=Screen Saver Comment[ar]=حافظ الشّاشة Comment[ca]=Estalvi de pantalla Comment[ca@valencia]=Estalvi de pantalla Comment[cs]=Šetřič obrazovky Comment[da]=Pauseskærm Comment[de]=Bildschirmschoner Comment[el]=Προφύλαξη οθόνης Comment[en_GB]=Screen Saver Comment[es]=Salvapantallas Comment[et]=Ekraanisäästja Comment[eu]=Pantaila-babesle Comment[fi]=Näytönsäästäjä Comment[fr]=Écran de veille Comment[gl]=Protector de pantalla Comment[he]=שומר מסך Comment[hu]=Képernyővédő Comment[ia]=Salvator de schermo Comment[id]=Screen Saver Comment[it]=Salvaschermo Comment[ja]=スクリーンセーバー Comment[ko]=화면 보호기 Comment[nb]=Pauseskjerm Comment[nl]=Schermbeveiliging Comment[nn]=Pause­skjerm Comment[pa]=ਸਕਰੀਨ ਸੇਵਰ Comment[pl]=Wygaszacz ekranu Comment[pt]=Protector de Ecrã Comment[pt_BR]=Protetor de tela Comment[ru]=Хранитель экрана Comment[sk]=Šetrič obrazovky Comment[sl]=Ohranjevalnik zaslona Comment[sr]=Чувар екрана Comment[sr@ijekavian]=Чувар екрана Comment[sr@ijekavianlatin]=Čuvar ekrana Comment[sr@latin]=Čuvar ekrana Comment[sv]=Skärmsläckare Comment[tr]=Ekran Koruyucu Comment[uk]=Зберігач екрана Comment[x-test]=xxScreen Saverxx Comment[zh_CN]=屏幕保护程序 Comment[zh_TW]=螢幕保護程式 [Event/locked] Name=Screen locked Name[ar]=قُفلت الشّاشة Name[ca]=Pantalla bloquejada Name[ca@valencia]=Pantalla bloquejada Name[cs]=Obrazovka uzamčena Name[da]=Skærmen er låst Name[de]=Bildschirm gesperrt Name[el]=Οθόνη κλειδωμένη Name[en_GB]=Screen locked Name[es]=Pantalla bloqueada Name[et]=Ekraan on lukustatud Name[eu]=Pantaila giltzatuta Name[fi]=Näyttö lukittu Name[fr]=Écran verrouillé Name[gl]=A pantalla está trancada Name[he]=המסך נעול Name[hu]=Képernyő zárolva Name[ia]=Schermo blocate -Name[id]=Screen locked +Name[id]=Layar terkunci Name[it]=Schermo bloccato Name[ja]=スクリーンロック Name[ko]=화면 잠김 Name[nb]=Skjermen låst Name[nl]=Scherm vergrendeld Name[nn]=Skjermen er låst Name[pa]=ਸਕਰੀਨ ਲਾਕ ਹੈ Name[pl]=Ekran zablokowany Name[pt]=Ecrã bloqueado Name[pt_BR]=Tela bloqueada Name[ru]=Экран заблокирован Name[sk]=Obrazovka zamknutá Name[sl]=Zaklenjen zaslon Name[sr]=Екран закључан Name[sr@ijekavian]=Екран закључан Name[sr@ijekavianlatin]=Ekran zaključan Name[sr@latin]=Ekran zaključan Name[sv]=Skärm låst Name[tr]=Ekran kilitli Name[uk]=Екран заблоковано Name[x-test]=xxScreen lockedxx Name[zh_CN]=屏幕已锁定 Name[zh_TW]=螢幕已鎖定 Comment=The screen has been locked Comment[ar]=لقد قُفلت الشّاشة Comment[ca]=S'ha bloquejat la pantalla Comment[ca@valencia]=S'ha bloquejat la pantalla Comment[cs]=Obrazovka byla uzamčena Comment[da]=Skærmen er blevet låst Comment[de]=Der Bildschirm wurde gesperrt Comment[el]=Η οθόνη έχει κλειδωθεί Comment[en_GB]=The screen has been locked Comment[es]=Se ha bloqueado la pantalla Comment[et]=Ekraan on lukustatud Comment[eu]=Pantaila giltzatu egin da Comment[fi]=Näyttö on lukittunut Comment[fr]=L'écran a été verrouillé Comment[gl]=A pantalla trancouse Comment[he]=המסך ננעל Comment[hu]=A képernyő zárolva. Comment[ia]=Le schermo ha essite blocate Comment[id]=Layar telah dikunci Comment[it]=Lo schermo è stato bloccato Comment[ja]=スクリーンがロックされました Comment[ko]=화면 잠김 Comment[nb]=Skjermen er nå låst Comment[nl]=Het scherm is vergrendeld Comment[nn]=Skjermen er låst Comment[pa]=ਸਕਰੀਨ ਨੂੰ ਲਾਕ ਕੀਤਾ ਜਾ ਚੁੱਕਾ ਹੈ Comment[pl]=Ekran został zablokowany Comment[pt]=O ecrã foi bloqueado Comment[pt_BR]=A tela foi bloqueada Comment[ru]=Экран был заблокирован Comment[sk]=Obrazovka bola zamknutá Comment[sl]=Zaslon je bil zaklenjen Comment[sr]=Екран је управо закључан Comment[sr@ijekavian]=Екран је управо закључан Comment[sr@ijekavianlatin]=Ekran je upravo zaključan Comment[sr@latin]=Ekran je upravo zaključan Comment[sv]=Skärmen har låsts Comment[tr]=Ekran kilitlendi Comment[uk]=Екран було заблоковано Comment[x-test]=xxThe screen has been lockedxx Comment[zh_CN]=屏幕已经被锁定 Comment[zh_TW]=螢幕已鎖定 Action=None [Event/unlocked] Name=Screen unlocked Name[ar]=أُزيل قفل الشّاشة Name[ca]=Pantalla desbloquejada Name[ca@valencia]=Pantalla desbloquejada Name[cs]=Obrazovka odemknuta Name[da]=Skærmen er låst op Name[de]=Bildschirm freigegeben Name[el]=Οθόνη ξεκλείδωτη Name[en_GB]=Screen unlocked Name[es]=Pantalla desbloqueada Name[et]=Ekraan on lahtilukustatud Name[eu]=Pantaila giltzapetik askatuta Name[fi]=Näytön lukitus aukeni Name[fr]=Écran déverrouillé Name[gl]=A pantalla desatrancouse Name[he]=המסך נפתח Name[hu]=Képernyő feloldva Name[ia]=Schermo disblocate -Name[id]=Screen unlocked +Name[id]=Layar terbukakunci Name[it]=Schermo sbloccato Name[ja]=スクリーンロック解除 Name[ko]=화면 잠금 풀림 Name[nb]=Skjermen låst opp Name[nl]=Scherm ontgrendeld Name[nn]=Skjermen er låst opp Name[pa]=ਸਕਰੀਨ ਅਣ-ਲਾਕ ਹੈ Name[pl]=Ekran odblokowany Name[pt]=Ecrã desbloqueado Name[pt_BR]=Tela desbloqueada Name[ru]=Экран разблокирован Name[sk]=Obrazovka odomknutá Name[sl]=Odklenjen zaslon Name[sr]=Екран откључан Name[sr@ijekavian]=Екран откључан Name[sr@ijekavianlatin]=Ekran otključan Name[sr@latin]=Ekran otključan Name[sv]=Skärm upplåst Name[tr]=Ekran kilidi açık Name[uk]=Екран розблоковано Name[x-test]=xxScreen unlockedxx Name[zh_CN]=屏幕已解锁 Name[zh_TW]=螢幕已解除鎖定 Comment=The screen has been unlocked Comment[ar]=لقد أُزيل قفل الشّاشة Comment[ca]=S'ha desbloquejat la pantalla Comment[ca@valencia]=S'ha desbloquejat la pantalla Comment[cs]=Obrazovka byla odemknuta Comment[da]=Skærmen er blevet låst op Comment[de]=Der Bildschirm wurde freigegeben Comment[el]=Η οθόνη έχει ξεκλειδωθεί Comment[en_GB]=The screen has been unlocked Comment[es]=Se ha desbloqueado la pantalla Comment[et]=Ekraan on lahtilukustatud Comment[eu]=Pantaila giltzapetik askatu da Comment[fi]=Näytön lukitus on avautunut Comment[fr]=L'écran a été déverrouillé Comment[gl]=A pantalla desatrancouse Comment[he]=נעילת המסך בוטלה Comment[hu]=A képernyő feloldva Comment[ia]=Le schermo ha essite disblocate Comment[id]=Layar telah dibukakunci Comment[it]=Lo schermo è stato sbloccato Comment[ja]=スクリーンのロックが解除されました Comment[ko]=화면 잠금 풀림 Comment[nb]=Skjermen er blitt låst opp Comment[nl]=Het scherm is ontgrendeld Comment[nn]=Skjermen er låst opp Comment[pa]=ਸਕਰੀਨ ਨੂੰ ਅਣ-ਲਾਕ ਕੀਤਾ ਜਾ ਚੁੱਕਾ ਹੈ Comment[pl]=Ekran został odblokowany Comment[pt]=O ecrã foi desbloqueado Comment[pt_BR]=A tela foi desbloqueada Comment[ru]=Экран был разблокирован Comment[sk]=Obrazovka bola odomknutá Comment[sl]=Zaslon je bil odklenjen Comment[sr]=Екран је управо откључан Comment[sr@ijekavian]=Екран је управо откључан Comment[sr@ijekavianlatin]=Ekran je upravo otključan Comment[sr@latin]=Ekran je upravo otključan Comment[sv]=Skärmen har låsts upp Comment[tr]=Ekran kilidi açıldı Comment[uk]=Екран було розблоковано Comment[x-test]=xxThe screen has been unlockedxx Comment[zh_CN]=屏幕已经被解锁 Comment[zh_TW]=螢幕已解除鎖定 Action=None