Команда блокировки экрана, один вкладыш

62

Я пытаюсь выяснить, существует ли какой-либо эквивалентный однострочный инструмент командной строки, который воспроизводит точно идентичные функциональные возможности опции меню «Блокировка экрана», доступной через приложение связки ключей в OS X 10.6

Мне известны все «обычные» решения (настройки режима сна / заставки, требующие пароль для повторной активации), но они мне не подходят.

Я также знаю об этой опции:

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

что тоже не подходит для меня.

Идеальной функциональностью является опция «Блокировка экрана», однако я пока не нашел элегантного способа назвать это.

В данный момент я звоню через Automator, что не элегантно!

Я много читал об этой проблеме, и я понимаю, что никто еще не нашел «святой Грааль», но мне было интересно, могло ли это измениться.

user40433
источник
Что вы называете с Automator?
Матье Риглер
3
Что плохого в настройке параметров безопасности для запроса пароля при активной заставке и последующего использования горячего угла для активации заставки? Это быстро и элегантно, но вы сказали, что вам не понравилось это решение.
Ɱark Ƭ
3
Это прагматичное предложение, которое я пробовал и выключал в течение многих лет использования, но характер моих рабочих схем означает, что это мешает> 80% времени. Мне нужна способность (физически) реагировать на инженерные запросы и аварийные ситуации и немедленно блокировать экран, но в равной степени иметь удаленный доступ к блоку, в то время как он также поддерживает все существующие соединения и фоновые задачи.
user40433
1
Re: «где находится меню блокировки экрана в связке ключей» Открыть связку ключей ... настройки ... показать в строке меню! Re: "что это делает?" Это блокирует экран! Кроме того, я думаю, что я объяснил свои требования (и мое отвращение к «решениям», которые, по мнению некоторых людей, отвечают моим требованиям, но не вполне) достаточно тщательно.
user40433
1
Смотрите также stackoverflow.com/questions/1976520/...
rogerdpack

Ответы:

50

В OS X 10.9 и позже:

pmset displaysleepnow

Сама по себе эта команда вызывает только спящий режим отображения, в результате чего появляется черный экран. Настраивая ваш компьютер так, чтобы он запрашивал пароль сразу после сна, эта однострочная команда работает как команда «заблокировать компьютер». Настройки доступны в Системных настройках> Безопасность и конфиденциальность> Общие .

Источник: Как заблокировать экран на MacBook Air?

jordanbtucker
источник
9
для полноты картины это работает только в том случае, если в системных настройках включена опция «Восстановить пароль после сна или начала заставки»
Hofi
1
Это кажется наиболее эквивалентным CTRL + SHIFT + Eject.
Ян Кю Пеблик
Это не эквивалентно пункту меню Keychain. Не блокирует экран; это только усыпляет компьютер.
Радон Росборо
1
@RadonRosborough Нет, это не усыпляет компьютер . Он переводит дисплей в спящий режим. Если вы получаете удаленный доступ к заблокированному Mac, все работает. Это может быть самый короткий и быстрый ответ, поскольку он не проходит через весь медленный графический интерфейс Keychain или медленный графический интерфейс Finder.
дан
Это гораздо лучшее решение, чем старый и плохо размещенный пункт меню связки ключей 👏🏻.
дан
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
mrArkwright
источник
Не могли бы вы уточнить, как это использовать? Копировать-вставить это в рабочий процесс Automator? Или сделать из него Applescript? В настоящее время трудно что-то сделать с вашим ответом.
Саару Линдестёкке
1
Это простая программа Objective-C. Скопируйте его в файл с именем main.m. Затем запустите 'clang -framework Foundation main.m -o lockscreen', чтобы скомпилировать программу. «./lockscreen» запускает программу и блокирует ваш экран.
mrArkwright
Попробовал, работает как описано. Компиляция генерирует одно предупреждение instance method '-_lockScreenMenuHit:' not found, но приложение блокировки экрана работает, тем не менее. Однако при двойном щелчке открывается окно терминала, прежде чем он блокирует экран. После разблокировки вы должны закрыть окно вручную. Есть ли способ закрыть это окно автоматически?
Саару Линдестёкке
6
Я собрал OS X App: Lock Screen.app на основе этого ответа и чьей-либо работы, как подробно описано в ссылке, он просто оборачивает этот код и добавляет красивый значок, поэтому мы можем запустить его напрямую, спасибо.
Мэнди Гао
1
Это не работает aymore на 10.13, потому что MenuExtra был удален. Это работает вместо: stackoverflow.com/a/26492632/368409
Lloeki
15

Я использую Альфреда →

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

Универсальная горячая клавиша позволяет мне активировать ее с помощью клавиатуры.

Вайбхав Баджпай
источник
Потрясающие! Встроенная универсальная горячая клавиша или часть блока питания?
Дэн Розенстарк
1
Это встроенный ...
Вайбхав Баджпаи
2
К сожалению, это не так - он также отключает подключение к Интернету, в то время как блокировка меню Keychain не делает.
Марчин Бобовски,
В Launchbar тоже есть эквивалент : «Экран блокировки»
Уильям
Это не эквивалентно пункту меню Keychain. Он не переводит компьютер в спящий режим, а также проигрывает раздражающую анимацию.
Радон Росборо
15

ОБНОВЛЕНИЕ: 2019.

Экран блокировки для связки ключей больше не доступен в текущей версии MacOS Mojave & High Sierra.

Apple теперь добавила пункт меню блокировки экрана в меню Apple. Это сочетание клавиш по умолчанию crtl + cmd + Q

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


------------- Старый ответ для предыдущей ОС ниже --------------

Ответ @Bart Arondson состоит в использовании некоторых кодов клавиш для навигации по меню экрана блокировки цепочки для ключей.

Все коды клавиш можно обойти, используя GUI Scripting для непосредственного попадания в пункты меню.

Использование кодов клавиш для навигации по меню можно ударить и пропустить. И так же, как мне не нравятся сценарии с графическим интерфейсом, потому что они также могут быть хитами и миссами, но в этом случае они меньше поражают.

Этот код appleScript: (обновлено 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

Может использоваться в действии Automator «Запуск приложения» в рабочем процессе службы Automator.

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

Затем вы предоставляете сервису сочетание клавиш. Обычным способом в сочетаниях клавиш.

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

Обслуживание:

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

markhunte
источник
Это отлично работает для того, что мне нужно, спасибо!
Никтрикс
Вы также можете запустить команду терминала из Automator, поэтому я использовал это. это казалось более "элегантным" :). очень хорошее решение, хотя!
Сорин Бутуругеану
3
Я использовал это решение в течение длительного времени, но, поскольку osX El Captain больше не работает :(.
Marcin Bobowski
Все еще смотрю на это. Но похоже, что меню не отчитывается о следующем элементе, который нужно щелкнуть. Запуск этих двух строк работает, но медленно. 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.

Ɱark Ƭ
источник
Спасибо за ваш комментарий, но это то, с чем я боролся слишком долго и пытаюсь найти альтернативу.
user40433
1
Просто для ясности и полноты, я должен отметить, что вышесказанное действительно запускает экранную заставку, но не делает то, что предлагает функция меню «Блокировка экрана».
user40433
1
Тогда вам нужно быть более конкретным относительно того, что именно вы ищете.
Ɱark Ƭ
Хм ... не уверен, что могу быть более конкретным или кратким, чем первый абзац в моем первоначальном вопросе!
user40433
1
У меня был шанс протестировать на 10.6.8. На этой ОС монитор выключен, а сеанс заблокирован. Я нашел программный способ сделать это, но он не встроен.
Ɱark Ƭ
3

Я думаю, что ответ на ваш вопрос: «Нет, для этого нет командной строки».

Поскольку это пункт меню, к нему нельзя легко получить доступ с помощью Keyboard Maestro или другого аналогичного инструмента.

Однако, если вы не против решения с использованием стороннего приложения, QuickLock позволит вам сделать это.

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

Приложение позволит вам установить пароль (отдельно от пароля вашей учетной записи).

Это не требует использования пароля с заставкой, все это совершенно отдельно.

Вы можете посмотреть его видео в действии на http://www.youtube.com/watch?v=SBHwykPB19o.

ps когда экран заблокирован, введите пароль, чтобы разблокировать его. Я был сбит с толку, потому что ожидал увидеть поле пароля. Здесь ничего нет. Вы просто вводите пароль.

pps Я использовал это только в течение нескольких минут, так что могут быть некоторые другие проблемы, о которых я не знаю, но это, кажется, отвечает всем требованиям.

Ти Джей Луома
источник
Спасибо за ваш вклад ... хотя и не то, что я намеревался искать (мне нравятся методы с открытым исходным кодом и DIY!), Он выглядит очень интересно и, кажется, предлагает необходимую мне функциональность, хотя и в стороннем приложении. Я рассмотрю это более внимательно. Спасибо!
user40433
Я бы тоже хотел найти способ сделать это, но я не думаю, что есть такой.
TJ Luoma
кажется мертвым ...
rogerdpack
3

Mac не предназначен, чтобы предоставить вам такую ​​возможность. Однако в этой статье описывается обходной путь с использованием QuickSilver. Хотя я не могу понять, почему вам не нравится решение, которое Apple предоставляет изначально, я желаю вам удачи в поиске решения.

bispymusic
источник
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, команда блокировки экрана One-Liner
  2. Используйте appify, чтобы превратить его в приложение OS X, перейдя по ссылке выше в моем резюме.
  3. Установите Quicksilver.
  4. Используйте Quicksilver, чтобы назначить сочетание клавиш для запуска нового приложения. Это в разделе «Триггеры». Мне нравится Quicksilver, потому что мне нравятся сочетания клавиш / горячие клавиши для запуска приложений и веб-сайтов на OS X.
jbrock
источник
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;
}

Это сохраняет пользователю его собственные настройки, но надежно блокирует экран :)

real_human_bean
источник
В High Sierra эти значения больше не устанавливаются пользовательским интерфейсом. Однако, если вы установите их вручную, пользовательский интерфейс будет соблюдать их. defaults write com.apple.screensaver askForPassword -bool TRUEи defaults write com.apple.screensaver askForPasswordDelay -int 10 это мои значения по умолчанию. Теперь приведенный выше скрипт будет вести себя так, как описано.
Шон Перри
0

Я использую BetterTouchTool для этой цели и назначил сочетание клавиш для «Переключиться на экран входа в систему» ​​(то есть экран блокировки): не соответствует требованию командной строки, но в любом случае может быть полезным для вас.

сочетание клавиш в BetterTouchTool для блокировки экрана

iolsmit
источник
Спасибо за вашу помощь и предложение. Наряду с QuickLock, упомянутым выше @TJLuoma, BetterTouchTool (хотя и не метод, который я намеревался найти) действительно очень близко подходит к моим функциональным задачам. Я буду более внимательно смотреть на это ... спасибо.
user40433
0

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

Я использую Ctrl-Shift-Eject для блокировки экрана. Это быстро, просто и работает. Это встроенный способ блокировки экрана. Никто, скорее всего, не предложит альтернативу просто потому, что репликация функций, уже встроенных в ОС, слишком избыточна для того, чтобы тратить на нее много времени.

Насколько я могу судить, в 10.8 в Keychain нет опции «блокировка экрана», поэтому ваше предпочтительное решение не будет существовать, если вы когда-нибудь обновитесь. Редактировать: не заметил этого в настройках Keychain; да, это все еще там в 10.8.

Если вы используете Automator для этого, вы не можете просто упаковать скрипт как приложение и назначить комбинацию горячих клавиш или оставить ее в Dock для быстрого доступа?

dr.nixon
источник
Ctrl-shift-eject действительно просто входит в режим «быстрого переключения пользователя». По крайней мере, одно решение VPN (то, которое мне нужно использовать для рабочих целей) не нравится, и отключает VPN, когда я делаю это, заканчивая любые базовые сеансы, к которым я мог подключиться. Хотя я могу просто повторно подключиться к своему сеансу VPN, когда я разблокирую компьютер, это может занять минуту + длительный опыт и, таким образом, не срабатывает «быстрый» вариант. Поэтому, IMO, это не точное решение вопроса.
Jon V
0

Точно так же, как задающий вопрос, я искал способ быстрого использования экрана блокировки цепочки для ключей.

Объединяя знания из старой подсказки Mac OS X и некоторых приложений, я придумал следующее:

Сначала следуйте инструкциям из связанной подсказки Mac OS X, чтобы добавить сочетание клавиш для функции блокировки экрана цепочки для ключей.

Для меня (на 10.8.4) это не решило проблему, так как мне пришлось нажать ctrl+, F8чтобы сместить фокус на строку состояния, нажать, downчтобы открыть строку меню связки ключей, а затем нажать 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

Акаш Агарвал
источник
Но это не заблокировало. Я нажал на ключ, и он снова открылся. Не возражаете, если вы прочтете комментарии других ответов о «запрашивать пароль сразу после ..» в системных настройках и соответственно обновите свои?
Анки
-1

Я использую настройку пароля Заставки с помощью нажатия клавиши (Ctrl + Shift + Eject) на 10.6.8, и из того, что я вижу, он делает то же самое, что и элемент «Блокировка экрана» на значке панели задач «Доступ к цепочке ключей».

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

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

Пользуюсь этим уже несколько лет без проблем.

nwinkler
источник
1
Спасибо, но, к сожалению, для этого требуется , чтобы опция «требовать заставку при возвращении из спящего режима или заставки» была проверена, и, как упоминалось ранее, я не хочу этим заниматься.
user40433
-1

Ну, просто объедините два из приведенных выше ответов. Запустите эту команду:

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

После настройки параметров безопасности и конфиденциальности немедленно запросить пароль. Создайте псевдоним для своей оболочки, если вы хотите сделать команду проще для выполнения.

Кирк МакЭлхирн
источник
3
Да, но, как упоминалось выше, я не хочу, чтобы в настройках «Безопасность и конфиденциальность» всегда требовался пароль. Вот почему функциональность команды «Экран блокировки» (в частности) настолько крута - она ​​обеспечивает уровень безопасности, который мне требуется, на совершенно особой основе.
user40433
-1

FWIW, я понимаю вашу ситуацию и сам искал хорошее решение. Я наткнулся на эту тему, потому что я искал более быстрый метод, чем тот, который я в итоге придумал. Я придумал что-то, что, хотя и не совсем то, на что я надеялся, работает и является приемлемым компромиссом. Я использую те же команды сценариев GUI, что и @markhunte, показывает (немного другая структура, но та же идея), но вместо того, чтобы просто поместить их в рабочий процесс службы Automator, я разделил их на пакет .app, созданный с помощью Platypus. Я сделал это, потому что в своих путешествиях и тестировании я обнаружил, что службы Automator работают очень медленно при определенных условиях. Если ваш Mac находится под каким-либо стрессом, например, выполняется сканирование диска, что-то делает программное обеспечение A / V, Mail сносит электронную почту и т. Д., ОС, кажется, выдвигает сервисы на задний план. Это приводит к тому, что требуется несколько секунд, прежде чем рабочий процесс запускается (иногда), а иногда даже несколько секунд, прежде чем команды GUI в службе запускаются. Весьма раздражает, если вы пытаетесь «быстро» заблокировать экран, и на это уходит 10 секунд!

Наличие автономного «приложения» также имеет то преимущество, что вы можете использовать буквально десятки различных сторонних приложений для его запуска или просто использовать Spotlight или службу Automator для запуска приложения. Любой из них работает. Быстрее всего я нашел старую утилиту под названием Spark, которая чудесным образом работает даже в 10.8.4. Не спрашивайте меня, как с тех пор, как в последний раз разрабатывался враг 10.4! Spark можно найти здесь - Spark

В дополнение ко всему этому, я боролся с проблемой команд GUI, которые иногда работают медленно, связывая в cocoaDialog и вызывая его первым, когда приложение запускается, чтобы показать небольшой плавающий пузырь в середине экрана, указывающий на происходящий экран блокировки. Обычно блокировка происходит сразу после этого, но если есть задержка, это по крайней мере дает некоторую визуальную «обратную связь» о том, что вы нажали правые клавиши. Я также сделал его самовосстанавливающимся - если «Включить доступ к вспомогательным устройствам» не включен, он предупреждает вас с помощью диалогового окна и позволяет сразу же включить его. Он также будет следить за тем, чтобы в строке меню отображалось меню доступа брелка, так как это является обязательным требованием, или не удается выполнить разбор сценариев GUI.

Майк М
источник
-2

Ctrl- Shift- ⏏ Eject(на старых Mac),
Ctrl- Shift- ⌽ Power(на новых Mac )

Пожалуйста.
источник