Блокування екрана Command One-Liner


62

Я намагаюся з’ясувати, чи існує якийсь еквівалентний однолінійний командний рядок, який повторює точну функціональність опції меню «Заблокований екран», доступної через додаток Keychain в ОС X 10.6

Мені відомо про всі "звичайні" рішення (налаштування сну / заставки, щоб вимагати пароль при повторній активації), але вони мені не підходять.

Я також знаю такий варіант:

/System/Library/CoreServices/Menu\ Extras/user.menu/Contents/Resources/CGSession -suspend

що також мені не підходить.

Ідеальною функціональністю є варіант "Блокування екрана", однак я ще не знайшов елегантного способу назвати це.

На даний момент я дзвоню через Automator, який не є елегантним!

Я багато читав про це питання, і я розумію, що ще ніхто не знайшов «святого грааля», але мені було цікаво, чи це могло змінитися.


Що ви телефонуєте з Automator?
Матьє Ріглер

3
Що не так у встановленні налаштувань безпеки вимагати пароль, коли заставка активна, а потім за допомогою гарячого куточка активувати заставку? Це швидко і елегантно, але ви сказали, що це рішення вам не подобається.
Ɱark Ƭ

3
Це прагматична пропозиція, і я намагався вмикати і вимикати протягом багатьох років використання, але характер моїх робіт означає, що це перешкоджає> 80% часу. Мені потрібна здатність (фізично) реагувати на інженерні запити та надзвичайні ситуації та негайно заблокувати екран, але однаково мати віддалений доступ до вікна, в той час як він також підтримує всі існуючі підключення та фонові завдання.
користувач40433

1
Re: "де меню Блокування екрана в брелок" Відкрити брелок ... налаштування ... показати в панелі меню! Re: "що це робить?" Він блокує екран! Крім того, я думаю, що я пояснив свої вимоги (і свою неприязнь до «рішень», які, як вважають деякі люди, відповідають моїм вимогам, але не відповідають).
користувач40433

Відповіді:


50

В ОС X 10.9 і новіших версій:

pmset displaysleepnow

Сама по собі ця команда змушує дисплей просто спати, в результаті чого з’являється чорний екран. Налаштувавши комп’ютер на вимогу пароля одразу після сну, цей одноклапник працює як команда "блокувати комп'ютер". Налаштування доступно у розділі Налаштування системи> Безпека та конфіденційність> Загальне .

Джерело: Як заблокувати екран на MacBook Air?


9
просто для повноти, це працює лише в тому випадку, якщо в системних налаштуваннях увімкнено опцію безпеки "Запросити пароль після сну або заставки"
Хофі

1
Це здається найбільш еквівалентним CTRL + SHIFT + Eject.
Ян Кю Пеблик

Це не еквівалентно пункту рядка меню Keychain. Він не блокує екран; він лише укладає комп'ютер у режим сну.
Радон Росборо

1
@RadonRosborough Ні, комп'ютер не спить. Він відображає режим сну, якщо ви віддалено отримуєте доступ до заблокованого Mac, все працює. Це може бути найкоротший і найшвидший відповідь, оскільки він не проходить через весь повільний графічний інтерфейс Keychain або повільний графічний інтерфейс Finder.
дан

Це набагато краще рішення, ніж старий і погано розміщений запис меню Keychain 👏🏻.
дан

41

Примітка. Це рішення унікальне тим, що воно використовує функцію стану панелі меню Keychain Access, але воно не вимагає від вас включення цього Show keychain status in menu barпараметра, як це роблять методи AppleScript.

Я також шукав рішення для цього. Сьогодні я просто трохи пограв і знайшов спосіб програмно реально викликати функціональність з плагіну меню брелока. Це рішення працює чудово до тих пір, поки Apple не змінить відповідні частини в плагіні меню брелоків. Ви можете створити невеликий двійковий код для блокування екрана, вставивши його у свій термінал ...

# Do our work in the temporary directory that gets cleaned on boot
cd /tmp

# Create the source file
cat > main.m <<END_OF_FILE

#import <objc/runtime.h>
#import <Foundation/Foundation.h>

int main () {
    NSBundle *bundle = [NSBundle bundleWithPath:@"/Applications/Utilities/Keychain Access.app/Contents/Resources/Keychain.menu"];

    Class principalClass = [bundle principalClass];

    id instance = [[principalClass alloc] init];

    [instance performSelector:@selector(_lockScreenMenuHit:) withObject:nil];

    return 0;
}

END_OF_FILE

# Compile the source file
clang -framework Foundation main.m -o lockscreen

Виконайте програму, набравши:

./lockscreen

Не могли б ви детальніше розказати, як це використовувати? Чи потрібно скопіювати та вставити це в робочий процес Automator? Або зробити з нього яблучний скрипт? Як зараз, важко щось зробити зі своєю відповіддю.
Saaru Lindestøkke

1
Це проста програма Objective-C. Скопіюйте його у файл під назвою main.m. Потім запустіть 'clang -framework Foundation main.m -o lockscreen' для складання програми. './lockscreen' запускає програму та блокує ваш екран.
mrArkwright

Спробував це, працює як описано. Компіляція генерує одне попередження instance method '-_lockScreenMenuHit:' not found, але програма блокування екрану все-таки працює. Однак при подвійному натисканні кнопка відкриває вікно терміналу перед тим, як заблокувати екран. Після розблокування вам доведеться закрити вікно вручну. Чи є спосіб закрити це вікно автоматично?
Saaru Lindestøkke

6
Я зібрав додаток OS X: Lock Screen.app на основі цієї відповіді та чиєїсь роботи, як детально описано у посиланні, він просто загортає цей код і додає прекрасну іконку, тому ми можемо запустити його безпосередньо, дякую.
Менґді Гао

1
Це не працює більше 10.13, оскільки MenuExtra було видалено. Це працює замість: stackoverflow.com/a/26492632/368409
Lloeki

15

Я використовую Альфреда →

введіть тут опис зображення

Універсальна швидка клавіша дозволяє мені активувати її за допомогою клавіатури.


Дивовижно! Чи є вбудований універсальний клавіш швидкого доступу чи частина блоку живлення?
Дан Розенстарк

1
Це вбудований ...
Vaibhav Bajpai

2
На жаль, це не все - воно також вимикає підключення до Інтернету, а використання блокування меню Keychain не робить.
Марцін Бобовський

У Launchbar також є еквівалент : "Блокування екрану"
Вільям Террелл

Це не еквівалентно пункту меню Keychain. Він не заводить комп'ютер спати, а також грає набридливу анімацію.
Радон Росборо

15

ОНОВЛЕННЯ: 2019.

Екран блокування для брелок більше не доступний у поточній версії MacOS Mojave & High Sierra.

Зараз Apple додала пункт меню "Блокування екрана" в меню Apple. Це клавіша скорочення клавіатури за замовчуванням crtl + cmd + Q

введіть тут опис зображення


------------- Стара відповідь на попередню ОС нижче --------------

@Bart Arondson відповідає на використання деяких клавішних кодів для навігації по меню "Блокування екрана брелоків" .

Усі ключові коди можна обійти, використовуючи графічний графічний інтерфейс, щоб насправді потрапити безпосередньо на пункти меню.

Використання ключових кодів для навігації по меню можна потрапляти і пропускати. І настільки, наскільки мені не подобається сценарій GUI, тому що він також може потрапити і пропустити імхо.

Цей код яблучного сценарію: (оновлено 18.05.2016, отримано з використання AppleScript для блокування екрана , підтверджено, що працює в El Capitan)

tell application "System Events" to tell process "SystemUIServer"
    tell (menu bar item 1 of menu bar 1 where description is "Keychain menu extra")
        click
        click menu item "Lock Screen" of menu 1
    end tell
end tell

Може використовуватися в дії "Запустити приклад" Автоматизатора в робочому процесі служби автоматизації.

введіть тут опис зображення

Потім ви надаєте службі ярлик клавіатури. Зазвичай у клавіатурних скороченнях.

введіть тут опис зображення

Сервіс:

введіть тут опис зображення


Це спрацювало чудово для того, що мені було потрібно, дякую!
nictrix

ви також можете запустити термінальну команду від автоматизатора, тому я це використав. вона зашита більш "елегантною" :). дуже приємне рішення, хоча!
Сорін Бутуругеану

3
Я давно використовував це рішення, але оскільки osX El Captain більше не працює :(.
Марцін Бобовський

Ще дивлюся на це. Але схоже, що меню не звітує про себе, щоб натиснути наступний елемент. Запуск цих двох рядків працює, але повільно. tell application "System Events" to tell process "SystemUIServer" to click (first menu bar item of menu bar 1 whose description is "Keychain menu extra") tell application "System Events" to click (menu item "Lock Screen" of menu 1 of menu bar item 1 of menu bar 1 of application process "SystemUIServer")
markhunte

8

Встановіть налаштування для блокування екрана, коли заставка активна.

Область налаштувань безпеки та конфіденційності

Потім ви можете скористатися цією термінальною командою для запуску заставки.

/System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine

Наскільки я можу сказати, це саме те, що робить пункт меню Keychain.


Дякую за Ваш коментар, але це те, з чим я боровся занадто довго і намагаюся знайти альтернативу.
користувач40433

1
Що стосується ясності та повноти, я повинен сказати, що вищезазначене дійсно запускає заставку, але це не робить те, що пропонує функція меню «Заблокований екран».
користувач40433

1
Тоді вам слід бути більш конкретним щодо того, що саме ви шукаєте.
Ɱark Ƭ

Гммм ... не впевнений, що я можу бути більш конкретним або лаконічним, ніж вступний параграф у моєму первісному запитанні!
користувач40433

1
У мене був шанс випробувати 10.6.8. У цій ОС монітор увімкнено, а сеанс заблокований. Я знайшов programatic спосіб зробити це, але він не вбудований.
Ɱark ƭ

3

Я думаю, що відповідь на ваше запитання "Ні, немає способу зробити це командним рядком".

Оскільки це пункт рядка меню, ви не можете легко отримати доступ до клавіатури Maestro або іншого подібного інструменту.

Однак якщо ви не проти рішення, використовуючи сторонній додаток, QuickLock дозволить вам це зробити.

Це безкоштовна програма (пожертви прийняті), яка дозволить вам призначити ярлик клавіатури, щоб заблокувати екран. Також є пункт рядка меню, який можна натиснути, щоб заблокувати екран.

Додаток дозволить вам встановити пароль (окремо від пароля вашого облікового запису).

Він не вимагає використання пароля за допомогою заставки, все це повністю окремо.

Ви можете переглянути його відео в дії на веб- сайті http://www.youtube.com/watch?v=SBHwykPB19o

ps, коли екран заблокований, введіть свій пароль, щоб розблокувати його. Я розгубився, бо очікував побачити поле пароля. Немає жодної. Ви просто введіть пароль.

pps Я використовував це лише кілька хвилин, тому з ним можуть бути деякі інші проблеми, про які я не знаю, але, здається, він відповідає законопроекту.


Дякую за ваш внесок ... хоча це не те, що я поставив за мету шукати (я люблю відкриті джерела та методи саморобки!), Але це виглядає дуже цікаво і, здається, пропонує функціонал, який мені потрібен, хоч у додатку сторонніх розробників. Я детальніше розберуся в цьому. Дякую!
користувач40433

Я також хотів би знайти спосіб це зробити, але я не думаю, що існує такий.
TJ Luoma

здається мертвим ...
rogerdpack

3

Mac не призначений для надання вам такої можливості. Однак ця стаття пояснює вирішення методу QuickSilver. Хоча я не можу зрозуміти, чому вам не подобається рішення, яке Apple пропонує на самому собі, я бажаю вам удачі в пошуку рішення.


3

Швидкий спосіб заснути ваш апарат за допомогою командного рядка за допомогою AppleScript

osascript -e 'tell application "Finder" to sleep'

Це не заблокує ваш екран, якщо ви не встановите потрібний пароль негайно, що я не люблю робити. Я просто відзначаю це для нащадків.


3

Легкий псевдонім. Додайте це до свого bashrc

alias afk="osascript -e 'tell application \"System Events\" to keystroke \"q\" using {command down,control down}'"

введіть afkсвій термінал для виконання.


2

Я використовував код, розміщений вище jnk. Потім я використовував appify, щоб перетворити його в додаток OS X, mathiasbynens.be/notes/shell-script-mac-apps . Тоді я використав Quicksilver, щоб призначити власний ярлик клавіатури (я вибрав cmd + L). Термінал не відкривається / не залишається відкритим (як це стосувалося деяких) щодо того, як я його налаштував, тому що я запускаю додаток OS X.

  1. Дотримуйтесь відповіді вище за допомогою jnk, Lock Screen Command One-Liner
  2. Використовуйте appify, щоб перетворити його в додаток OS X, перейшовши за посиланням, наведеним вище в моєму резюме.
  3. Встановіть Quicksilver.
  4. За допомогою Quicksilver призначте комбінацію клавіш для запуску нової програми. Це в розділі "Тригери". Мені подобається Quicksilver, тому що я люблю мати комбінації клавіш / гарячих клавіш для запуску програм та веб-сайтів на OS X.

1

Я також зіткнувся з цією проблемою. /System/Library/CoreServices/Menu\ Extras/user.menu/Contents/Resources/CGSession -suspendзмушує систему призупиняти всі завдання, а не блокувати екран.

JordanBtucker був на правильному шляху, ось ця функція, яку я використовую:

lockscr() {
  if [ "$(defaults read com.apple.screensaver askForPasswordDelay 2>/dev/null)" ]; then
    local Olddelay="$(defaults read com.apple.screensaver askForPasswordDelay)"
    defaults write com.apple.screensaver askForPasswordDelay -int 0 && \
        pmset displaysleepnow
    defaults write com.apple.screensaver askForPasswordDelay -int "${Olddelay}"
  else
    defaults write com.apple.screensaver askForPasswordDelay -int 0 && \
        pmset displaysleepnow
    defaults delete com.apple.screensaver askForPasswordDelay
  fi;
}

Це зберігає у користувача власні налаштування, але надійно блокує екран :)


У Високій Сьєррі ці значення більше не встановлюються інтерфейсом користувача. Однак якщо встановити їх вручну, інтерфейс буде їх шанувати. defaults write com.apple.screensaver askForPassword -bool TRUEі defaults write com.apple.screensaver askForPasswordDelay -int 10 Це мої значення за замовчуванням. Тепер описаний вище сценарій буде вести себе як описано.
Шон Перрі

0

Для цього я використовую BetterTouchTool і призначив ярлик клавіатури на "Переключитися на екран входу" (який є екраном блокування): не відповідає вимозі командного рядка, але може бути корисним для вас.

комбінація клавіш у BetterTouchTool, щоб заблокувати екран


Дякуємо за вашу допомогу та пропозицію. Поряд із QuickLock, згаданим вище від @TJLuoma, BetterTouchTool (хоча це не метод, який я поставив за мету), здається, дуже наближається до моїх функціональних цілей. Я детальніше придивлюсь до цього ... дякую.
користувач40433

0

Я не зовсім впевнений, що я тут розумію ваше питання. Якщо вам потрібен пароль на заставці, це не зупинить процеси запуску або не заблокує віддалений доступ до вашого Mac. У мене є цей параметр (за допомогою ControlPlane активувати його на роботі та деактивувати його вдома), і ніколи не було, щоб система відмовилась відповідати на віддалений робочий стіл, VNC або SSH. У всіх випадках, коли потрібен доступ до GUI, мені просто потрібно ввести пароль; SSH використовує пару ключів, тому пароль не запитується. Якщо ви не хочете, щоб програми спали, переконайтеся, що параметри живлення системи такі, що вони не ввійдуть у режим сну перед поверненням. Просто встановіть час очікування на час тривалої затримки. Якщо ви просто не хочете, щоб вас турбували вводити пароль, коли ви сидите перед комп'ютером і працюєте,

Я використовую ctrl-shift-eject для блокування екрана. Це швидко, просто, і це працює. Це вбудований спосіб блокування екрана. Ніхто, швидше за все, не зможе придумати альтернативу просто тому, що реплікація функцій, які вже були викладені в операційній системі, є надто зайвою, щоб хтось міг витрачати багато часу на пошуки.

Наскільки я можу сказати, в Keychain в 10.8 так само немає опції "заблокований екран", тому ваше бажане рішення не буде існувати, якщо ви коли-небудь оновите. Редагувати: не помітили цього в налаштуваннях брелка; так, це все ще є в 10.8.

Якщо ви використовуєте Automator для цього, чи не можете ви просто упакувати сценарій як додаток і призначити комбінацію гарячих клавіш або залишити його в доці для швидкого доступу?


Ctrl-shift-eject дійсно просто переходить у режим «швидкого перемикання користувача». Принаймні одне рішення VPN (те, яке мені потрібно використовувати для роботи), це не любить, і відключає VPN, коли я це роблю, припиняючи будь-які основні сеанси, до яких я, можливо, підключився. Хоча я можу просто знову підключитися до свого VPN-сеансу, коли я розблокую комп'ютер, це може бути хвилина + довгий досвід, і, таким чином, не вдається "швидкий" варіант. Тому це, ІМО, не є точним рішенням питання.
Джон V

0

Так само, як і запитуючи запитання, я шукав спосіб швидкого використання екрана блокування брелоків.

Поєднуючи знання зі старої підказки Mac OS X та деякі Applescripting, я придумав таке:

Спочатку виконайте кроки з пов'язаної підказки Mac OS X, щоб додати ярлик клавіатури для функцій блокування екрана блоків.

Для мене (10.8.4) це не вирішило проблему, оскільки мені довелося натиснути ctrl+, F8щоб перенести фокус у рядок стану, натисніть, downщоб відкрити панель меню Keychain, а потім натисніть ctrl+, F9щоб заблокувати екран. Я автоматизував цей процес за допомогою наступного Applescript:

# Press ^F8
tell application "System Events"
    key code 100 using control down
end tell

# Press "down"
tell application "System Events"
    key code 125
end tell

# Press ^F9
tell application "System Events"
    key code 101 using control down
end tell

Відкрийте Automator, створіть нову Службу, додайте Run Applescriptмодуль, скопіюйте та вставте вищевказаний код та збережіть службу Automator з потрібним ім'ям. Тепер перейдіть до клавіатурних скорочень у налаштуваннях системи та додайте комбінацію клавіш для щойно створеного сервісу Automator. Я встановити міну ctrl+ cmd+ L.

Тепер натисніть комбінацію клавіш у будь-якому додатку, і ваш екран буде заблокований миттєво.

Для тих, хто цікавиться, чому б просто не піти з іншими методами, ось моя думка щодо них:

  • Швидкий екран комутації / блокування користувача
    За допомогою цього методу я виходжу з своєї корпоративної мережі WPA2. Це не добре, оскільки повторне підключення іноді займає віки.

  • Скрінсейвер + пароль
    Повторює функціональність, але це означає, що якщо мій ноутбук деякий час неактивний, коли я читаю поруч із ним папір, екран буде заблокований, коли я хочу його знову використовувати. Це небажано. З'єднання цього методу з гарячим кутом має побічний ефект, що недосвідчені користувачі Mac можуть випадково викликати гарячий кут, що призведе до блокування екрана. Я також іноді випадково потрапляю у гарячий кут, який значно зупинить мій робочий процес.

  • Програми сторонніх розробників
    Це все добре, але навіщо запускати додаток третьої частини, якщо він наявний в ОС?


0

10.14.6 Mojave я запускаю механізм заставки, використовуючи цю команду:

/System/Library/CoreServices/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine


Але це не замикалося. Я натиснув ключ і він відкрився назад. Майте на увазі, якщо ви прочитаєте коментарі інших відповідей про "вимагати пароль негайно після .." у системних налаштуваннях та оновите свої відповідно?
ankii

-1

Я використовую налаштування пароля заставки за допомогою натискання клавіші (Ctrl + Shift + Eject) 10.6.8, і з того, що я бачу, він робить те саме, що пункт "Блокування екрана" з піктограми панелі завдань доступу Keychain Access.

Я знаю, що це схоже на деякі інші відповіді, але замість «гарячого куточка» він використовує натискання клавіш, що для мене зручніше.

Це рішення більш докладно описано тут, ось звідки я його отримав: http://osxdaily.com/2011/01/17/lock-screen-mac/

Використовують це вже кілька років без проблем.


1
Дякую, але, на жаль, це вимагає, щоб параметр "вимагати заставки при поверненні зі сну або заставки" параметр перевірявся, і, як було сказано раніше, це не те, чим я хотів би займатися.
користувач40433

-1

Ну просто поєднайте дві вищевказані відповіді. Виконайте цю команду:

open -a /System/Library/Frameworks/ScreenSaver.framework//Versions/A/Resources/ScreenSaverEngine.app

Після встановлення параметрів безпеки та конфіденційності негайно попросити пароль. Зробіть псевдонім для вашої оболонки, якщо ви хочете полегшити виконання команди.


3
Так, але, як було сказано вище, я не хочу мати налаштування безпеки та конфіденційності, щоб завжди вимагати пароль негайно. Ось чому функціональність команди Lock Screen (зокрема) є настільки крутою - вона забезпечує рівень безпеки, який я вимагаю на повністю спеціальній основі.
користувач40433

-1

FWIW, я розумію вашу ситуацію і сам шукав хорошого рішення для цього. Я наткнувся на цю нитку, тому що шукав дещо швидший метод, ніж те, що я врешті-решт придумав. Я придумав щось, що, хоча не зовсім те, на що я сподівався, працює і є прийнятним компромісом. Я використовую такі ж команди графічних сценаріїв графічного інтерфейсу, що і @markhunte (дещо інша структура, але та сама ідея), але замість того, щоб просто розміщувати все це в робочому процесі служби автоматизатора, я розділив його на пакет .app, створений за допомогою Platypus. Я зробив це, тому що під час своїх подорожей та тестування я виявив, що послуги Automator працюють дуже повільно за певних умов. Якщо ваш Mac переживає будь-який стрес, тобто сканування диска, програмне забезпечення A / V робить щось, пошта витягує електронну пошту тощо, операційна система, здається, штовхає служби на задній план. Це впливає на це через кілька секунд до запуску робочого процесу (іноді), а іноді навіть за кілька секунд до запуску команд GUI у службі. Досить дратівливо, якщо ви намагаєтесь «швидко» заблокувати екран, і на це потрібно 10 секунд!

Маючи автономний "додаток" також має перевагу в тому, що ви можете використовувати буквально десятки різних сторонніх програм для його запуску або просто використовувати Spotlight або службу Automator для запуску програми. Будь-яка з них працює. Найшвидший, який я знайшов, - це стара утиліта під назвою Spark, яка дивом все ще працює навіть у 10.8.4. Не запитуйте мене, як з моменту останнього розробленого ворога 10.4! Іскру можна знайти тут - Іскра

На додаток до всього цього, я боровся з проблемою команд GUI, які іноді працюють повільно, зв’язуючи в cocoaDialog і викликаючи його першим, коли програма запущена, щоб у середині екрана з’явився невеликий плаваючий міхур, який вказує на те, що відбувається екран блокування. Зазвичай блокування відбувається одразу після, але якщо є затримка, це принаймні дає деякий візуальний "зворотній зв'язок" про те, що ви натискали праві клавіші. Я також зробив це самозцілення - якщо "Увімкнути доступ до допоміжних пристроїв" не ввімкнено, воно попередить вас за допомогою діалогового вікна та дозволить вам ввімкнути його відразу. Він також переконається, що на панелі меню відображається меню доступу до брелока, оскільки це вимога, або сценарій графічного інтерфейсу вийшов з ладу.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.