Compare commits
No commits in common. "a86f527a76297ecb4e565e2a83279417b65b6abf" and "efe8adf1c4f39a405ba3550cdfbe2046939900cf" have entirely different histories.
a86f527a76
...
efe8adf1c4
3 changed files with 1 additions and 131 deletions
|
|
@ -1,99 +0,0 @@
|
|||
#!/usr/bin/env python
|
||||
# find_processes_using_secure_input.py
|
||||
# From "Finding the app/process that’s using Secure Input" by Alex Chan
|
||||
# (https://alexwlchan.net/2021/secure-input/).
|
||||
# Licensed under CC-BY 4.0
|
||||
"""
|
||||
If macOS detects that you're typing sensitive data (e.g. a password), it prevents
|
||||
other apps from reading keystrokes. This is normally a good thing, but it's mildly
|
||||
annoying if you use an app like TextExpander, and macOS doesn't notice that it's
|
||||
no longer using Secure Input. Then your keyboard shortcuts stop working!
|
||||
|
||||
This script will print a list of processes that have Secure Input enabled, e.g.:
|
||||
|
||||
The following processes are using Secure Input:
|
||||
113 loginwindow
|
||||
302 Safari
|
||||
519 Firefox
|
||||
|
||||
It relies on two interesting commands:
|
||||
|
||||
ioreg -a -l -w 0
|
||||
prints the I/O Kit Registry in XML format, which includes information about
|
||||
a process using Secure Input in the kCGSSessionSecureInputPID key
|
||||
|
||||
ps -c -o command= -p <pid>
|
||||
prints the executable name associated with a process ID (pid), which is
|
||||
used for the output
|
||||
|
||||
See https://alexwlchan.net/2021/secure-input/
|
||||
|
||||
"""
|
||||
|
||||
import plistlib
|
||||
import subprocess
|
||||
|
||||
|
||||
def find_dicts_in_tree(d):
|
||||
"""
|
||||
Traverses the values of d, returning everything that looks dict-like.
|
||||
|
||||
Ideally I'd have a better idea of the structure of the output of ioreg,
|
||||
but I don't care to spend that much time on this problem.
|
||||
"""
|
||||
if isinstance(d, dict):
|
||||
yield d
|
||||
for dict_value in d.values():
|
||||
for dv in find_dicts_in_tree(dict_value):
|
||||
yield dv
|
||||
elif isinstance(d, list):
|
||||
for list_item in d:
|
||||
for lv in find_dicts_in_tree(list_item):
|
||||
yield lv
|
||||
else:
|
||||
pass
|
||||
|
||||
|
||||
def executable_name(pid):
|
||||
"""
|
||||
Returns the executable name associated with a given pid.
|
||||
"""
|
||||
return subprocess.check_output([
|
||||
"ps",
|
||||
"-c", # Only show the executable name, not the full command line
|
||||
"-o", "command=", # Only show the command column, no header
|
||||
"-p", str(pid) # Only show the given process ID
|
||||
]).strip().encode("utf8")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
ioreg_output = subprocess.check_output([
|
||||
"ioreg",
|
||||
"-a", # Archive the output in XML
|
||||
"-l", # Show properties for all displayed objects
|
||||
"-w", "0" # Unlimited line width
|
||||
])
|
||||
|
||||
try:
|
||||
plist = plistlib.loads(ioreg_output, fmt=plistlib.FMT_XML)
|
||||
except AttributeError: # Python 2
|
||||
plist = plistlib.readPlistFromString(ioreg_output)
|
||||
|
||||
process_ids = set()
|
||||
for d in find_dicts_in_tree(plist):
|
||||
if "kCGSSessionSecureInputPID" in d:
|
||||
process_ids.add(d["kCGSSessionSecureInputPID"])
|
||||
|
||||
sorted_pids = [
|
||||
str(pid)
|
||||
for pid in sorted(int(p) for p in process_ids)
|
||||
]
|
||||
|
||||
print("The following processes are using Secure Input:")
|
||||
if sorted_pids:
|
||||
subprocess.check_call([
|
||||
"ps",
|
||||
"-c", # Only show the executable name, not the full command line
|
||||
"-o", "pid=,command=", # Only show the PID/command column, no header
|
||||
"-p", ",".join(sorted_pids) # Only get the selected processes
|
||||
])
|
||||
|
|
@ -9,8 +9,6 @@
|
|||
(pkgs.writeShellScriptBin "get-current-wifi" ''
|
||||
ipconfig getsummary $(networksetup -listallhardwareports | awk '/Hardware Port: Wi-Fi/{getline; print $2}') | awk -F ' SSID : ' '/ SSID : / {print $2}'
|
||||
'')
|
||||
(pkgs.writeScriptBin "secure-finger"
|
||||
(builtins.readFile ./../bin/find_processes_using_secure_input.py))
|
||||
];
|
||||
sessionVariables = {
|
||||
JULIA_NUM_THREADS = "$(sysctl -n hw.logicalcpu)";
|
||||
|
|
|
|||
|
|
@ -1,7 +1,4 @@
|
|||
{ lib }:
|
||||
let language-format-string = "[$symbol($version )]($style)";
|
||||
in {
|
||||
|
||||
{ lib }: {
|
||||
enable = true;
|
||||
enableBashIntegration = true;
|
||||
enableZshIntegration = true;
|
||||
|
|
@ -32,14 +29,6 @@ in {
|
|||
format = "([\\[$all_status$ahead_behind\\]]($style))";
|
||||
};
|
||||
hostname = { format = "[$hostname]($style)"; };
|
||||
julia = { format = language-format-string; };
|
||||
nix_shell = {
|
||||
symbol = "";
|
||||
impure_msg = "/";
|
||||
pure_msg = "/";
|
||||
format = "[$symbol$state( ($name))]($style)";
|
||||
};
|
||||
nodejs = { format = language-format-string; };
|
||||
os = {
|
||||
disabled = false;
|
||||
symbols = {
|
||||
|
|
@ -52,24 +41,6 @@ in {
|
|||
NixOS = "";
|
||||
};
|
||||
};
|
||||
package = {
|
||||
format = language-format-string;
|
||||
symbol = " ";
|
||||
};
|
||||
python = {
|
||||
format =
|
||||
"[\${symbol}\${pyenv_prefix}(\${version} )(($virtualenv) )]($style)";
|
||||
symbol = "";
|
||||
};
|
||||
quarto = { format = language-format-string; };
|
||||
rlang = {
|
||||
format = language-format-string;
|
||||
symbol = "";
|
||||
};
|
||||
ruby = {
|
||||
format = language-format-string;
|
||||
symbol = "";
|
||||
};
|
||||
shell = {
|
||||
# Show which shell if not using zsh (the default)
|
||||
disabled = false;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue