AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 477823
Accepted
zjeffer
zjeffer
Asked: 2018-10-26 11:33:48 +0800 CST2018-10-26 11:33:48 +0800 CST 2018-10-26 11:33:48 +0800 CST

Use dbus para obter o nome do mediaplayer atualmente em execução

  • 772

EDIT: Eu removi e reescrevi a maior parte do post para tornar a pergunta mais direta e para tornar o post muito mais curto. É claro que você pode visualizar o histórico de edições para obter a versão anterior.

Usando bspwm no Arch Linux. playerctlpara controlar a mídia, sxhkdpara vincular as teclas de mídia aos comandos playerctl.

Estou tentando encontrar uma maneira de obter o media player ativo mais recente, então quando uso as teclas de mídia para reproduzir/pausar uma música/filme/.. , meu pc controla automaticamente o mediaplayer ativo mais recente.

Por exemplo, quando o Spotify está aberto em segundo plano e estou assistindo algo no VLC, ele sabe controlar o VLC e não o Spotify quando pressiono as teclas de mídia. No momento, se ambos estiverem abertos, o VLC sempre terá prioridade do playerctl.

O que eu preciso é uma maneira de perguntar ao dbus qual mediaplayer está tocando uma música no momento, para que eu possa mantê-lo em um arquivo.


EDIT: Encontrei uma maneira de perguntar a cada spotify e vlc usando:

qdbus org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlaybackStatus

e

qdbus org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlaybackStatus

mas eu gostaria de perguntar automaticamente a todos os mediaplayers, não cada um pelo nome. Tentei fazer com org.mpris.MediaPlayer2.*mas não deu certo.

Alguma ideia?

linux d-bus
  • 2 2 respostas
  • 3182 Views

2 respostas

  • Voted
  1. Best Answer
    zjeffer
    2018-11-10T10:32:55+08:002018-11-10T10:32:55+08:00

    Eu fiz assim:

    Este é um script que sempre é executado para verificar qual player está ativo no momento/foi ativo pela última vez e armazena esse player em um arquivo:

    #!/bin/sh
    
    while true ; do
        for m in `qdbus | egrep -i 'org.mpris.MediaPlayer2|plasma-browser-integration'` ; do
            if [[ `qdbus $m /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlaybackStatus` == 'Playing' ]]; then
                echo $m > ~/.config/activePlayer/currentPlaying.txt
            fi
        done
        sleep 1
    done
    

    e este é um script que envia comandos dbus como play/pause/etc/ para o player que está ativo no momento (com base nesse arquivo). O script é chamado pelo sxhkd, que ouve minhas teclas pressionadas.

    #!/bin/sh
    
    #Get command
    case $1 in
        'play-pause')
            cmd='/org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause';;
        'next')
            cmd='/org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Next';;
        'previous')
            cmd='/org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Previous';;
        'stop')
            cmd='/org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Stop';;
        'skipForward')
            cmd='/org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Seek 5000000';;
        'skipBackward')
            cmd='/org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Seek -5000000';;
        *)
    esac
    
    #Send command to qdbus
    if [[ `qdbus | egrep -i 'org.mpris.MediaPlayer2|plasma-browser-integration' | wc -l` -eq 1 ]]; then
        qdbus `qdbus | egrep -i 'org.mpris.MediaPlayer2|plasma-browser-integration'` $cmd
    else
        qdbus `cat ~/.config/activePlayer/currentPlaying.txt` $cmd
    fi
    
    unset cmd
    
    • 2
  2. user298610
    2020-02-01T14:28:19+08:002020-02-01T14:28:19+08:00

    Na versão mais recente, você pode usar playerctld .

    playerctl -p playerctld play-pause
    

    Isso iniciará um processo persistente que monitora a atividade do jogador e dá o comando ao jogador ativo.

    • 1

relate perguntas

  • Existe uma maneira de fazer ls mostrar arquivos ocultos apenas para determinados diretórios?

  • Inicie/pare o serviço systemd usando o atalho de teclado [fechado]

  • Necessidade de algumas chamadas de sistema

  • astyle não altera a formatação do arquivo de origem

  • Passe o sistema de arquivos raiz por rótulo para o kernel do Linux

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    ssh Não é possível negociar: "nenhuma cifra correspondente encontrada", está rejeitando o cbc

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    Como descarregar o módulo do kernel 'nvidia-drm'?

    • 13 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add retorna com: "Erro ao conectar ao agente: nenhum arquivo ou diretório" 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve