Recientemente he actualizado de Mohave a Big Sur, y el shell script que utilizo como Servicio PDF ha dejado de funcionar. El scriptllama a un scriptde Python para procesar el PDF, y éste da el error "operación no permitida". Pensando que esto tiene que ver con las nuevas restricciones de seguridad, intenté arrastrar todo lo que parecía relevante al Acceso a Disco Completo en el panel de Privacidad de la configuración de Seguridad y Privacidad, pero eso no ayudó. Aquí está el script con algunas líneas de depuración insertadas:
#!/bin/sh
export PATH=/Library/TeX/texbin:/usr/local/bin:$PATH
########################################
# Log stdout and stderr (from https://stackoverflow.com/a/20564208).
LOG_FILE=/tmp/pdfbooklog.txt
# Close STDOUT file descriptor
exec 1<&-
# Close STDERR FD
exec 2<&-
# Open STDOUT as $LOG_FILE file for read and write.
exec 1<>$LOG_FILE
# Redirect STDERR to STDOUT
exec 2>&1
########################################
# Get name of file printed and print options (unused).
# name or title of file printed, e.g., document.odt
TITLE="${1:-}"
# space separated options from the print dialog: k1=v1 k2='v2' …
PRINT_OPTIONS="$2"
# Make first (usually only) filename $1.
shift
shift
# Some programs called write files to the current directory, so make sure
# we're somewhere where that will work.
cd /tmp
########################################
# Apparently it's possible to be called with multiple filenames.
# Use a loop to make sure we handle all files listed on the command line.
for f in "$@"
do
echo "Processing '$f'"
echo "PATH: $PATH"
/usr/local/bin/python3 -c 'print("Python works")'
pdfbook2 --inner-margin=80 "$f"
open "${f%.pdf}-book.pdf"
done
Cuando lo invoco desde el diálogo de impresión, esto es lo que se escribe en el archivo de registro:
Processing '/var/folders/2j/w5jh3df55p7f4n05nh_m45jr0000gn/T/printing.11142.10/test.odt.pdf'
PATH: /Library/TeX/texbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
/Users/me/Library/PDF Services/Make PDF booklet.sh: line 40: /usr/local/bin/python3: Operation not permitted
/Users/me/Library/PDF Services/Make PDF booklet.sh: /Library/TeX/texbin/pdfbook2: /usr/bin/env: bad interpreter: Operation not permitted
The file /var/folders/2j/w5jh3df55p7f4n05nh_m45jr0000gn/T/printing.11142.10/test.odt-book.pdf does not exist.
test.odt-book.pdf does not exist.
Done
pdfbook2
se incluye con MacTeX: es un script de Python que invoca python3
con /usr/bin/env
. python3
está en /usr/local/bin
(instalado con Homebrew), y como muestra la línea de prueba, ni siquiera puedo invocarlo directamente. ¿Qué tengo que hacer para permitir que Big Sur ejecute este script?
Actualización:
- Por si no estaba claro, el script funciona cuando se invoca desde la Terminal. Sólo falla cuando se invoca desde el diálogo de impresión.
- Dado que el Big Sur todavía tiene
/usr/bin/python3
, se puede modificar el script anterior para utilizarlo. Cuando se invoca el Servicio PDF desde el diálogo de impresión,/usr/bin/python3 -c 'print("Python works")'
imprimirá "Python funciona"./usr/bin/python3 /Library/TeX/texbin/pdfbook2 --inner-margin=80 "$f"
comenzará a ejecutarse, peropdfbook2
lanzará entonces unPermissionError
de "Operación no permitida" cuando intenta ejecutarpdfcrop
que también está en/Library/TeX/texbin
. - La primera línea de
pdfbook2
es#!/usr/bin/env python3
. La primera línea depdfcrop
es#!/usr/bin/env perl
que debería encontrar/usr/bin/perl
ya que no hay Perl en mi/usr/local/bin
. - Así que aparentemente SIP está impidiendo que los Servicios PDF
exec
de cualquier cosa que no esté en un directorio protegido, y de utilizar/usr/bin/env
como intérprete (lo que podría eludir esa restricción). ¿Hay alguna manera de dar a un script permiso para hacer esto? Dar al script acceso total al disco no funciona.