Wayland y los atajos globales

Como mencioné una vez, el protocolo Wayland está hecho para ser más seguro y es por ello que no soporta los atajos globales desde las aplicaciones (mi problema está al final, antes expongo un caso con solución).

El primer caso toca narices que tuve fue referido con Crow-translate y el atajo global de Texto seleccionado. Al final lo resolví.

Editando el archivo
/usr/share/applications/io.crow_translate.CrowTranslate.desktop y sustituyendo las líneas Exec=qdbus por Exec=qdbus6 (gracias @victorhck ) se consigue que Crow-translate pueda funcionar en Wayland.

Pero además faltaba el atajo global. Primero desactivé los atajos globales desde la aplicación mientras estaba en X11 (ya que en Wayland la opción está sombreada). Después pasé a Wayland.

Tras mucho buscar conseguí una solución.

Añadir en Preferencias del sistema–>Teclado–>Atajos de teclado–>Añadir nuevo (1 en la imagen inferior)–>Orden o guión la orden:
dbus-send --type=method_call --dest=io.crow_translate.CrowTranslate /io/crow_translate/CrowTranslate/MainWindow io.crow_translate.CrowTranslate.MainWindow.translateSelection (2 en la imagen inferior) con un atajo personalizado (3 en la imagen inferior). En mi caso elegí “MAYS + .” para no entrar en conflicto con el que usaba “MAYS + -” (lo usa el sistema para otra cosa).

Hay que pulsar 2 veces ese atajo con un texto seleccionado para que funcione bien.

Vale, pero todo eso ha sido para Crow-translate. ¿Y mi problema? Pues a él paso.

Lo único que me funciona en Wayland para grabar vídeo y audio de golpe a pantalla completa es OBS. Pero el atajo definido en el programa para iniciar/parar una grabación sólo funciona con OBS en primer plano.
A mi me interesa que funcione desde cualquier ventana.

¿Alguien sabe si hay alguna orden para añadir en Atajos de Teclado de Preferencias del sistema para poder hacer algo similar a Crow-translate y poder solucionar mi problema?

Saludos

No sé si esto me podría ayudar:

Tengo dudas en la instalación:

  • Puedo ver que tengo pip:
zypper se -iv python | grep pip                       
i+ | python310-pip                | paquete | 24.0-1.1                      | noarch | Repositorio principal (OSS)
    name: python310-pip
i+ | python311-apipkg             | paquete | 3.0.2-1.5                     | noarch | Repositorio principal (OSS)
    name: python311-apipkg
i+ | python311-pip                | paquete | 24.0-1.1                      | noarch | Repositorio principal (OSS)
    name: python311-pip

pero no tengo pipx (le he quitado al comando la i porque no saldría nada):

zypper se -v python31\?-pipx                     
Cargando datos del repositorio...
Leyendo los paquetes instalados...

S | Name           | Type    | Version   | Arch   | Repository
--+----------------+---------+-----------+--------+----------------------------
  | python310-pipx | paquete | 1.6.0-1.1 | noarch | Repositorio principal (OSS)
    name: python310-pipx
  | python311-pipx | paquete | 1.6.0-1.1 | noarch | Repositorio principal (OSS)
    name: python311-pipx
  | python312-pipx | paquete | 1.6.0-1.1 | noarch | Repositorio principal (OSS)
    name: python312-pipx
¿Cuál tendría que instalar?
  • ¿Tengo que teclear las 2 líneas en ese orden?
  • En caso afirmativo, ¿he de teclear --user en la segunda línea o sustituir --user por mi usuario o añadirlo tras --usero teclear la línea tal cual?

Saludos

Solo tienes que instalar pipx o pip

Segun lo que instales, ejecutar el comando indicado, en el caso de pip no tienes que sustituir --user por nada.

pip -h
o
pipx -h

Ter lo explicara mejor

1 Like

Eso ya lo escribí antes de poner el post. Siento no haberlo indicado.
No sale lo de --user, sólo una escuesta lista de argumentos y pocos modificadores.

pipx -h no puedo escribirlo porque no lo tengo y no sé que versión tendría que instalar.

Saludos

Hola @Krovikan .

Primero, comprueba qué versión de python tienes. Adivino que ya tienes python 3.10 y python 3.11. Estaría bien comprobar si tienes python 2.7 o mejor dicho, qué cree python que tienes:

:~> python -V
:~> python3 -V

En principio, en Tumbleweed es probable que debieras tener python 3.11 y que python apunte a la versión 2.7 de todas formas. Al menos, es como lo tengo en esta máquina.

:~> ls -l /usr/bin/python?

Ok, yo no tengo 3.10 pero en tu zypper se python | grep pip sí sale. Recuerda que estamos hablando de versiones que han pasado de Leap a Tumbleweed.

Entonces el pip o pipx a instalar será el que corresponda con la versión de python que tienes “por defecto”. En realidad puedes usar por ejemplo pip3.14 install loquesea si has instalado la versión 3.14 pero tienes la 3.10 por defecto, por ejemplo. Pero evita rollos.

Lo más probable, como resumen, es que tengas que instalar python311-pipx, pero compruébalo antes.

En python > 3.10, deberías instalar el paquete python<versión > 3.10>-xyz para usar pip, pero hasta donde yo sé no está disponible. Hay quien usa, y lo he hecho alguna vez, el modificador -break-system-packages, con lo que el comando sería pip3 install --user obs-cli --break-system-packages.

He probado el comando pipx install obs-clie instalar instala, sería cuestión de usarlo a ver si va bien.

Salud!!

1 Like

Tengo python 3.11:

 ~/Descargas  python3 -V                                ✘ 104  44s    11:03:34 
Python 3.11.9

y apunta bien:

~/Descargas  ls -l /usr/bin/python?                              ✔    11:03:40 
lrwxrwxrwx 1 root root 10 may  1 10:39 /usr/bin/python3 -> python3.11*

En mi caso tengo instalado pip 3.10 y pip3.11 (supongo que prevaldrá el 3.11 según el ls del comando anterior):

~/Descargas  zypper se -i python | grep pip                      ✔    11:04:50 
i+ | python310-pip                | A Python package management system                                    | paquete
i+ | python311-apipkg             | Namespace control and lazy-import mechanism                           | paquete
i+ | python311-pip                | A Python package management system                                    | paquete

Para pipx tendría que instalar el 3.11:

~/Descargas  zypper se -v python | grep pipx                     ✔    11:14:16 
   | python310-pipx                                             | paquete     | 1.6.0-1.1                                            | noarch | Repositorio principal (OSS)
    name: python310-pipx
   | python311-pipx                                             | paquete     | 1.6.0-1.1                                            | noarch | Repositorio principal (OSS)
    name: python311-pipx
   | python312-pipx                                             | paquete     | 1.6.0-1.1                                            | noarch | Repositorio principal (OSS)
    name: python312-pipx

Al tener 3.11, los comando del github:

# pipx
pipx install obs-cli

# pip
pip install --user obs-cli

¿tendrían que ser añadiendo un 3 a pip y pipx?
¿Lo del break sería mi me hubiera hecho falta el 3.10 sólo?

Saludos

Respuesta corta: sólo a pip.

Fíjate que pip tienes dos instalados, mientras que pipx será el primero que instales. pipx por su parte se maneja por /etc/alternatives/ por defecto. La respuesta larga es que podrías si instalases varios, pero por ahora solo vas a tener uno.

La respuesta más larga incluye que python usa entornos (enviroments) con el comando env. Así, tú lanzas un entorno y dentro de él ejecutas los comandos de python que quieras siempre en la misma versión. Es como si tienes un script en bash y lo quieres ejecutar en fish, o si quieres utilizar comandos de bash en la sesión de fish. Lo primero, bash miscript.sh, lo segundo, bash y vas ejecutando los comandos de uno en uno.

Por lo que veo es si tienes algo mayor que 3.10, no para 3.10. Al menos, en instalaciones que tengo por ahí (vps o máquinas virtuales) con python 3.10 sigo pudiendo usar pip de forma normal. Creo. Ahora me haces dudar :rofl: Pero con 3.9 y menores sí que es seguro. Con mayores, o uso pipx o uso --break… Con 3.10 tendría que comprobarlo.

Así debería ser.

Exacto.

Python es un rollo usado así y gran parte de lo de la inmutabilidad viene de ahí.

Salud!!

1 Like

Me he liado un poco con esto. ¿Debo teclear para el comando pip del github esto entonces?:
pip3 install --user obs-cli --break-system-packages

Por último, ¿respeto el orden del github o cambio el orden de los comandos? Es decir, en el github pone:

# pipx
pipx install obs-cli

# pip
pip install --user obs-cli

Hago
pipx install obs-cli
pip3 install --user obs-cli --break-system-packages
o al revés:
pip3 install --user obs-cli --break-system-packages
pipx install obs-cli

Saludos

Son comandos que hacen exactamente lo mismo. Es lo que he intentado explicar: hasta 3.10 se hacía con pip, en las versiones siguientes se hace con pipx o bien con el modificador --break…

Yo creo que es mejor usar pipx, es más simple.

De todas formas, a mí en mi prueba no me funciona, me da un error de conexión del socket por ejemplo con obs-cli scene switch "Scene2" , pero reconozco que no tengo la menor idea de cómo va.

Salud!!

Nota: yo uso python fundamentalmente con Odoo y estoy familiarizado con su uso en ese entorno, digamos de forma “chapucera”: no uso env así que tengo que usar la versión de python y pip correspondiente de forma directa:

python3.8 /opt/odoo13/odoo-bin -c /etc/odoo13.conf
python3.10 /opt/odoo15/odoo-bin -c /etc/odoo15.conf
python3.11 /opt/odoo16/odoo-bin -c /etc/odoo16.conf

Y si necesito instalar alguna dependencia, tengo que usar el pip3.8, pip3.10, pip3.11 correspondiente.

En cuanto a obs, lo he probado alguna vez porque algún youtuber me decía que le daba no sé cuántos miles de problemas en Linux (le daba problemas… para grabar juegos de Windows que no iban bien en Linux :rofl: ). Cuando he hecho alguna captura de ese tipo he usado vokoscreenNG.

1 Like

Si ejecuto ~> pip install -h me sale la opción --user

  --user                      Install to the Python user install directory for your platform. Typically ~/.local/, or
                              %APPDATA%\Python on Windows. (See the Python documentation for site.USER_BASE for full details.)

Si ejecuto el comando para instalar el cliente OBS me funciona sin problemas.

~> pip install --user obs-cli
Collecting obs-cli
  Downloading obs_cli-0.8.2-py3-none-any.whl (31 kB)
Collecting obsws-python
  Downloading obsws_python-1.7.0-py3-none-any.whl (30 kB)
Collecting rich
  Downloading rich-13.7.1-py3-none-any.whl (240 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 240.7/240.7 kB 3.4 MB/s eta 0:00:00
Collecting websocket-client
  Downloading websocket_client-1.8.0-py3-none-any.whl (58 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 58.8/58.8 kB 1.1 MB/s eta 0:00:00
Collecting markdown-it-py>=2.2.0
  Downloading markdown_it_py-3.0.0-py3-none-any.whl (87 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 87.5/87.5 kB 1.3 MB/s eta 0:00:00
Collecting pygments<3.0.0,>=2.13.0
  Downloading pygments-2.18.0-py3-none-any.whl (1.2 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 13.5 MB/s eta 0:00:00
Collecting mdurl~=0.1
  Downloading mdurl-0.1.2-py3-none-any.whl (10.0 kB)
Installing collected packages: websocket-client, pygments, mdurl, obsws-python, markdown-it-py, rich, obs-cli
  WARNING: The script wsdump is installed in '/home/leches/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
  WARNING: The script pygmentize is installed in '/home/leches/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
  WARNING: The script markdown-it is installed in '/home/leches/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
  WARNING: The script obs-cli is installed in '/home/leches/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed markdown-it-py-3.0.0 mdurl-0.1.2 obs-cli-0.8.2 obsws-python-1.7.0 pygments-2.18.0 rich-13.7.1 websocket-client-1.8.0

Un pantallazo:

Esto es lo que tengo instalado de pip en mi Leap 15.5:

zypper se -iv pip | grep -i python
i  | python3-apipkg           | paquete | 2.1.0-150500.1.1       | noarch | Oss-Leap
    name: python3-apipkg
i  | python3-apipkg           | paquete | 2.1.0-150500.1.1       | noarch | repo-oss (15.5)
    name: python3-apipkg
i  | python3-pip              | paquete | 20.0.2-150400.20.1     | noarch | Oss-Leap
    name: python3-pip
i  | python3-pip              | paquete | 20.0.2-150400.20.1     | noarch | repo-oss (15.5)
    name: python3-pip
i  | python310-pip            | paquete | 22.0.4-150400.3.3.1    | noarch | (Paquetes del sistema)
    name: python310-pip
i  | python311-pip            | paquete | 22.3.1-150400.17.16.4  | noarch | SLE-Update-Leap
    name: python311-pip
i  | python311-pip            | paquete | 22.3.1-150400.17.16.4  | noarch | update-sle (15.5)
    name: python311-pip

En mi carpeta bin dentro de la carpeta oculta .local de usuario tengo el cliente instalado:

:~/.local/bin> ls -al
total 16
drwxr-xr-x 2 leches users  72 jul 22 13:02 .
drwxr-xr-x 6 leches users  54 jul 22 13:02 ..
-rwxr-xr-x 1 leches users 223 jul 22 13:02 markdown-it
-rwxr-xr-x 1 leches users 209 jul 22 13:02 obs-cli
-rwxr-xr-x 1 leches users 218 jul 22 13:02 pygmentize
-rwxr-xr-x 1 leches users 219 jul 22 13:02 wsdump
.....
....
:~/.local/lib/python3.11/site-packages> ls -al
total 40
drwxr-xr-x 16 leches users  4096 jul 22 13:02 .
drwxr-xr-x  3 leches users    27 jul 22 13:02 ..
drwxr-xr-x 10 leches users  4096 jul 22 13:02 markdown_it
drwxr-xr-x  2 leches users   132 jul 22 13:02 markdown_it_py-3.0.0.dist-info
drwxr-xr-x  3 leches users   146 jul 22 13:02 mdurl
drwxr-xr-x  2 leches users    81 jul 22 13:02 mdurl-0.1.2.dist-info
drwxr-xr-x  2 leches users   143 jul 22 13:02 obs_cli-0.8.2.dist-info
-rw-r--r--  1 leches users 21725 jul 22 13:02 obs_cli.py
drwxr-xr-x  3 leches users   180 jul 22 13:02 obsws_python
drwxr-xr-x  3 leches users    82 jul 22 13:02 obsws_python-1.7.0.dist-info
drwxr-xr-x  2 leches users    37 jul 22 13:02 __pycache__
drwxr-xr-x  7 leches users  4096 jul 22 13:02 pygments
drwxr-xr-x  3 leches users   106 jul 22 13:02 pygments-2.18.0.dist-info
drwxr-xr-x  3 leches users  4096 jul 22 13:02 rich
drwxr-xr-x  2 leches users    81 jul 22 13:02 rich-13.7.1.dist-info
drwxr-xr-x  4 leches users   309 jul 22 13:02 websocket
drwxr-xr-x  2 leches users   126 jul 22 13:02 websocket_client-1.8.0.dist-info
1 Like

Supongo que leap 15.5 está con python 3.10, y no veas la gracia que me hizo cuando se cargaron en Leap 15.6 python < 3.10, esperaba eso de Tumbleweed, no de Leap :grinning: y he pasado un servidor VPS de Leap a Tumbleweed por eso.

:~> pip install --user obs-cli
error: externally-managed-environment

× This environment is externally managed
╰─> To install Python packages system-wide, try
    zypper install python311-xyz, where xyz is the package
    you are trying to install.
    
    If you wish to install a non-rpm packaged Python package,
    create a virtual environment using python3.11 -m venv path/to/venv.
    Then use path/to/venv/bin/python and path/to/venv/bin/pip.
    
    If you wish to install a non-rpm packaged Python application,
    it may be easiest to use `pipx install xyz`, which will manage a
    virtual environment for you. Install pipx via `zypper install python311-pipx` .

note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
hint: See PEP 668 for the detailed specification.

[notice] A new release of pip is available: 24.0 -> 24.1.2
[notice] To update, run: pip install --upgrade pip

Compara con

:~> pip3.10 install --user obs-cli
Collecting obs-cli
  Downloading obs_cli-0.8.2-py3-none-any.whl.metadata (45 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 45.5/45.5 kB 1.3 MB/s eta 0:00:00
Collecting obsws-python (from obs-cli)
  Downloading obsws_python-1.7.0-py3-none-any.whl.metadata (5.5 kB)
Requirement already satisfied: rich in /usr/lib/python3.10/site-packages (from obs-cli) (13.7.1)
Requirement already satisfied: tomli>=2.0.1 in /usr/lib/python3.10/site-packages (from obsws-python->obs-cli) (2.0.1)
Requirement already satisfied: websocket-client in /usr/lib/python3.10/site-packages (from obsws-python->obs-cli) (1.7.0)
Requirement already satisfied: markdown-it-py>=2.2.0 in /usr/lib/python3.10/site-packages (from rich->obs-cli) (3.0.0)
Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /usr/lib/python3.10/site-packages (from rich->obs-cli) (2.18.0)
Requirement already satisfied: mdurl~=0.1 in /usr/lib/python3.10/site-packages (from markdown-it-py>=2.2.0->rich->obs-cli) (0.1.2)
Downloading obs_cli-0.8.2-py3-none-any.whl (31 kB)
Downloading obsws_python-1.7.0-py3-none-any.whl (30 kB)
Installing collected packages: obsws-python, obs-cli
Successfully installed obs-cli-0.8.2 obsws-python-1.7.0

[notice] A new release of pip is available: 24.0 -> 24.1.2
[notice] To update, run: pip install --upgrade pip

Misma máquina, mismo todo.

La historia con python es que puedes tener varias versiones en función de tu SO pero también en función de qué instales.

:~> cnf pipx

O programa 'pipx' pode atoparse nos seguintes paquetes:
  * python310-pipx [ ruta: /usr/bin/pipx, repositorio: openSUSE:repo-oss ]
  * python311-pipx [ ruta: /usr/bin/pipx, repositorio: openSUSE:repo-oss ]
  * python312-pipx [ ruta: /usr/bin/pipx, repositorio: openSUSE:repo-oss ]

Tente instalar con :
    sudo zypper install <paquete_seleccionado>

:~> sudo zypper in -y obs-cli

Probamos con pipx (¡pero si obs-cli ya está instalado! :scream:

:~> pipx install  obs-cli
⚠  File exists at /home/karl/.local/bin/obs-cli and points to /home/karl/.local/bin/obs-cli, not
    /home/karl/.local/share/pipx/venvs/obs-cli/bin/obs-cli. Not modifying.
  installed package obs-cli 0.8.2, installed using Python 3.11.9
  These apps are now globally available
    - obs-cli (symlink missing or pointing to unexpected location)
:~> sudo update-alternatives --list pipx
/usr/bin/pipx-3.11

Salud!!

[Edito]
Lo he instalado con pip3.10 pero al instalarlo con pipx me dice que se ha usado 3.11.9. :grinning:

2 Likes

Ya tengo respuesta para el tema. Antes tenía que hacer un dup, que el último fue la snapshot 20240625 y me ha convencido la snapshot 20240724 (1 mes después).

Por cierto. Uso OBS porque es el único que funciona bien en Wayland (vokoscreenNG está muy verde y no funciona bien). Sigo en X11 pero me estoy acostumbrando a las 2 únicas funciones que quiero de OBS, grabar la pantalla completa (para mi) y parar. Antes usaba SimpleScreenRecorder pero es incompatible con Wayland (sale mensaje de sólo X11).

He instalado el python311-pipx y he instalado el obs-cli:

 ~/Descargas  pipx install obs-cli                                              ✔  46s  11:08:42
  installed package obs-cli 0.8.2, installed using Python 3.11.9
  These apps are now globally available
    - obs-cli
⚠  Note: '/home/krovikan/.local/bin' is not on your PATH environment variable. These apps will not
    be globally accessible until your PATH is updated. Run `pipx ensurepath` to automatically add
    it, or manually modify your PATH in your shell's config file (e.g. ~/.bashrc).
done! ✨ 🌟 ✨

 ~/Descargas  pipx ensurepath                                                    ✔  9s  11:09:28
/home/krovikan/.local/bin has been been added to PATH, but you need to open a new terminal or
    re-login for this PATH change to take effect. Alternatively, you can source your shell's config
    file with e.g. 'source ~/.bashrc'.

You will need to open a new terminal or re-login for the PATH changes to take effect.
Alternatively, you can source your shell's config file with e.g. 'source ~/.bashrc'.

Otherwise pipx is ready to go! ✨ 🌟 ✨

También he añadido el PATH a la config de Fish:

~/Descargas  cat $HOME/.config/fish/config.fish                                    ✘ 1  12:11:49 
if status is-interactive
    # Commands to run in interactive sessions can go here
end

alias ls1='eza -labh --long'
alias hoy="date +\"Hoy es %A, %d de %B de %Y %nEsta es la semana %V y han pasado %j días de este año %nSon las %R %:z %Z\""
alias cls='clear'

fish_add_path /home/krovikan/bin/
fish_add_path /home/krovikan/.local/bin/

He abierto OBS y he activado el WebSocket y deshabilitado la petición de contraseña:


Después he asignado atajos de teclado para las órdenes que quiero (1):

He probado la grabación con OBS minimizado pulsando esos atajos y funciona perfectamente. Al menos en X11. He de creer que en Wayland también ya que el otro atajo que se ve en el pantallazo (el dbus-send etc) funciona en Wayland y en X11.

Saludos

1 Like

Comprobado en Wayland y funciona. Muchas gracias a todos por las intervenciones.

Para resumir el hilo, soluciones para Wayland:

  • Solución para hacer funcionar y tener tecla global en CrowTranslate en este post del hilo.
  • Solución para tener tecla global en OBS Studio en este post del hilo.

Saludos

1 Like

Buen trabajo. :+1:

1 Like

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.