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 / ubuntu / Perguntas / 1305948
Accepted
Levente
Levente
Asked: 2021-01-08 13:40:22 +0800 CST2021-01-08 13:40:22 +0800 CST 2021-01-08 13:40:22 +0800 CST

Onde estão os arquivos javascript da interface do usuário do gnome-shell no Ubuntu 20.04?

  • 772

Encontrei o código-fonte dos arquivos js da interface do usuário do gnome-shell no site do Debian:

https://sources.debian.org/src/gnome-shell/3.38.2-1/js/ui/

Então eu também encontrei esta resposta aqui , que aponta que esse caminho/arquivo existia no Ubuntu há algum tempo:

/usr/share/gnome-shell/js/ui/windowManager.js

Agora, no entanto, não vejo um jssubdiretório no /usr/share/gnome-shell/.

Eu procurei em toda a /partição por "lightbox.js" e "windowManager.js", mas nenhum foi encontrado.

Onde posso encontrar esses arquivos e quais obstáculos preciso superar se quiser alterar o valor de algumas variáveis ​​codificadas nele?

20.04
  • 2 2 respostas
  • 1268 Views

2 respostas

  • Voted
  1. Best Answer
    Levente
    2021-02-20T06:20:48+08:002021-02-20T06:20:48+08:00

    Compatibilidade de resposta:
    Ubuntu 20.04.2
    gnome-shell versão: 3.36.4
    servidor de exibição: X.Org Server

    Nota importante:

    Cometer qualquer erro ao alterar os arquivos do gnome-shell pode introduzir um impasse em sua sessão gráfica. Tente apenas se estiver familiarizado com os métodos comuns de recuperação do sistema.

    Além disso, a execução de alterações nesta resposta exigirá um fluxo de trabalho adicional para lidar com as atualizações do gnome-shell com a devida cautela, conforme explicado abaixo.

    Como modificar a funcionalidade

    No Ubuntu 20.04, os arquivos javascript do gnome-shell são normalmente empacotados dentro do arquivo:

    /usr/lib/gnome-shell/libgnome-shell.so
    

    Para substituí-los, é preciso extrair cópias dos arquivos de assunto e pedir ao Gnome para usar as cópias.

    Abaixo, forneço uma explicação geral abstrata e independente de tarefas. Para ver um procedimento semelhante em ação em uma tarefa prática específica, consulte esta resposta .

    As cópias de arquivos a serem modificadas podem ser organizadas em um local arbitrário, neste passeio eu uso o seguinte local:

    ~/.gnome-shell-custom-overlays/
    

    Para habilitar esta "plataforma de customização", é preciso colocar a seguinte linha em ~/.profile:

    export G_RESOURCE_OVERLAYS="/org/gnome/shell=$HOME/.gnome-shell-custom-overlays"
    

    Para que isso tenha efeito, é necessário efetuar logout e logon novamente.

    Uma nota sobre dependências:

    Antes de fazer esse procedimento funcionar na minha máquina, eu já tinha o libgtk-3-devpacote instalado. É para desenvolvimento / depuração, assim como o recurso de sobreposições de recursos parece ser. Portanto, agora não posso determinar se respeitar a G_RESOURCE_OVERLAYSvariável de ambiente depende da presença deste pacote ou não... Por precaução, esteja pronto para instalá-lo.

    Configurando arquivos de assunto:

    Pode-se listar o conteúdo da libgnome-shell.soseguinte forma:

    gresource list /usr/lib/gnome-shell/libgnome-shell.so
    

    A próxima etapa é extrair o arquivo a ser modificado. Vamos usar um exemplo onde este arquivo está localizado no ui/ subdiretório do gnome-shell.

    mkdir ~/.gnome-shell-custom-overlays/ui
    
    gresource extract /usr/lib/gnome-shell/libgnome-shell.so \
    /org/gnome/shell/ui/fileName.js > ~/.gnome-shell-custom-overlays/ui/fileName.js
    

    Ajustes:

    Para ver o efeito dos ajustes no arquivo personalizado, recarregar o gnome-shell após cada edição parece ser necessário. Isso pode ser feito rapidamente emitindo o rcomando através da caixa de diálogo Executar comando (revelada por Alt+ F2).

    Neste ponto, você deve ter uma substituição de trabalho que persiste por meio de reinicializações.

    Uma nota sobre a recuperação:

    Se uma tentativa de modificação der errado, deve ser possível alternar para um ambiente de console virtual (com, por exemplo, Ctrl+ Alt+ F3). A partir daí, comentar a entrada de G_RESOURCE_OVERLAYSlinha ~/.profilee, posteriormente, reinicializar deve desengatar a substituição e, assim, ter a capacidade de restaurar o sistema.

    Uma observação sobre o uso de G_RESOURCE_OVERLAYS

    Pode ser que esse recurso seja voltado principalmente para depuração e desenvolvimento, e talvez não para uso permanente.

    A estabilidade do sistema pode ser afetada: quando habilitei isso pela primeira vez, vi algumas estranhezas anteriormente não experimentadas com minhas configurações de som e algumas janelas piscando. Algumas reinicializações do gnome-shell e algumas (algumas?) reinicializações? No entanto, resolveram e, a partir do dia seguinte, não experimentei mais anomalias.

    Além disso, no aplicativo "Logs", posso ver que o evento de usar G_RESOURCE_OVERLAYS é registrado na seção "segurança", então é bom considerar isso.

    Em relação ao recebimento de atualizações do sistema ao usar G_RESOURCE_OVERLAYS:

    A seção a seguir é inteiramente especulação, não tenho confirmação se isso é válido; no entanto, pode ser útil considerar:

    Se e quando o gnome-shell receber uma atualização, vejo uma chance de que os arquivos personalizados do gnome-shell percam sua compatibilidade e possam até causar a quebra da área de trabalho.

    Acredito que, nesse caso, é possível suspender o uso do recurso G_RESOURCE_OVERLAYS ~/.profile(conforme discutido na seção de recuperação ), repetir posteriormente a extração dos arquivos de assunto do fresh libgnome-shell.soe reaplicar as modificações de maneira compatível.

    Caso uma atualização cause tal evento de incompatibilidade, especulo algum risco envolvendo o desktop travar já enquanto a etapa de configuração das atualizações está sendo executada; Posso visualizar danos colaterais significativos infligidos a outros sistemas em tal caso. (Eu posso estar errado.)

    No entanto, por esse motivo, eu consideraria permitir que as atualizações do gnome-shell sejam instaladas separadamente de outras atualizações, para que o evento não interfira na instalação de outros pacotes.

    Uma camada de controle, para estabilidade:

    Para gerenciar os riscos mencionados, pode-se colocar o gnome-shell em holdstatus , que impede que suas atualizações sejam instaladas, até que esteja pronto para lidar com elas.

    O procedimento então fica assim:

    • segure gnome-shell:sudo apt-mark hold gnome-shell
    • viver a vida em paz por quanto tempo
    • quando o gnome-shell tiver atualizações disponíveis, ele aparecerá na caixa de diálogo de atualizações, mas sua caixa de seleção estará desmarcada, portanto, não será instalada
      • deve-se poder continuar assim até estar pronto para realizar a atualização
      • quando estiver pronto para atualizar, siga de acordo com as próximas etapas
    • execute o atualizador e deixe que todas as atualizações sejam instaladas, exceto as do gnome-shell
      • reinicie, se necessário, e execute o atualizador novamente, apenas para garantir que nenhuma outra atualização esteja disponível no momento, além do gnome-shell
    • desabilite G_RESOURCE_OVERLAYS em ~/.profilee reinicie o gnome-shell
      • confirme se G_RESOURCE_OVERLAYS realmente não são usados, verificando a falta de personalizações da interface do usuário
    • desbloqueie o gnome-shell:sudo apt-mark unhold gnome-shell
    • execute o atualizador e deixe o gnome-shell atualizar desta vez
    • reative G_RESOURCE_OVERLAYS ~/.profilee reinicie o gnome-shell
      • lidar com qualquer consequência de incompatibilidade, se necessário
        • isso pode envolver desabilitar G_RESOURCE_OVERLAYS novamente (a partir de um console virtual, se necessário) e restabelecer os arquivos substituídos com modificações renovadas, desta vez compatíveis neles
    • tendo alcançado um estado estável novamente, coloque o gnome-shell novamente em espera
      • repita o procedimento acima quando novas atualizações chegarem

    Compilando os arquivos modificados de volta paralibgnome-shell.so

    Eu acho que os riscos em torno das atualizações podem ser evitados se alguém, em vez de confiar no recurso de sobreposições de recursos permanentemente, compilar os arquivos modificados de volta libgnome-shell.so(porque uma atualização não causa um evento de incompatibilidade; em vez disso, apenas reescreve libgnome-shell.sode uma só vez) .

    No entanto, infelizmente, essa tarefa parece depender de uma quantidade significativa de conhecimento do desenvolvedor Gnome e/ou Ubuntu; a mera agilidade em torno dos editores de código não parece ser suficiente.

    O compilador, glib-compile-resources, requer uma lista formatada em XML dos recursos a serem compilados, e sua saída não pode ser facilmente reanexada a um arquivo .so ELF existente .

    fonte

    Em um palpite, você está perdendo o código C usado pelas partes de nível inferior do gnome-shell, que vai para a mesma biblioteca que os recursos JavaScript .

    Se você obteve o gnome-shell compilando-o a partir do código-fonte (por exemplo, em jhbuild) [...]

    Se você obteve o gnome-shell de uma distribuição como Debian, Ubuntu [...], você precisará aplicar suas alterações de JavaScript como alterações locais no pacote gnome-shell dessa distribuição, reconstruir o pacote gnome-shell com uma alteração local no número da versão e instale o novo pacote.

    fonte

    Compilar a totalidade do gnome-shell a partir da fonte não é um recurso pequeno. Na verdade, tem um impacto tão extenso, aparentemente com tantas coisas que podem dar errado, que eu pessoalmente sinto que coloca a razoabilidade da escolha em questão.

    No entanto, se você puder compartilhar as etapas reais da compilação do gnome-shell no contexto do Ubuntu, envie uma resposta.


    Referências / literatura:

    • Crédito para perguntas/respostas do superusuário
    • Referência dos desenvolvedores do Gnome
    • Livro de receitas do Gnome no Arch wiki
    • 9
  2. Levente
    2021-02-23T17:03:14+08:002021-02-23T17:03:14+08:00

    Eu queria compartilhar uma abordagem alternativa que encontrei.

    Eu não consegui fazê-lo funcionar bem, e isso faz com que o sistema se comporte ainda mais estranho.

    Eu o compartilho apenas para aqueles que se sentem bem qualificados e experientes para tentar construir sobre ele, até que se torne uma alternativa realmente utilizável.

    Enquanto isso, a resposta utilizável continua sendo minha outra resposta para este post.


    Fontes para o seguinte método:

    • Postagem original do blog
    • Variante publicada no Gnome Wiki

    Essa abordagem extrai todos os arquivos javascript do gnome-shell — em vez de extrair apenas arquivos específicos para fins de alteração — e os organiza em um layout de diretório elaborado, de acordo com seu arranjo original definido no libgnome-shell.sobinário.

    Script atualizado para o gnome-shell 3.36, que realmente roda no Ubuntu 20.04:

    #! /bin/bash
    
    # Extracts contents of libgnome-shell.so
    # Compatible with gnome-shell v 3.36
    # https://gitlab.gnome.org/GNOME/gnome-shell/-/tree/gnome-3-36/js
    
    gs=/usr/lib/gnome-shell/libgnome-shell.so
    
    echo '--> Creating custom shell directory'
    mkdir $HOME/.gnome-shell-custom
    
    cd $HOME/.gnome-shell-custom
    
    echo '--> Preparing custom shell internal directory layout'
    mkdir -p \
    dbusServices/extensions/css \
    dbusServices/extensions/ui \
    dbusServices/notifications \
    gdm \
    misc \
    perf \
    portalHelper \
    ui/components \
    ui/status
    
    echo '--> Extracting resources'
    for r in `gresource list $gs`; do
        echo $r
        gresource extract $gs $r > ${r#\/org\/gnome\/shell/}
    done
    

    Tendo executado o script acima, os seguintes comandos podem habilitá-lo:

    # Either
    GNOME_SHELL_JS=$HOME/.gnome-shell-custom gnome-shell
    
    # Or
    GNOME_SHELL_JS=$HOME/.gnome-shell-custom gnome-shell --replace
    

    Essa linha pode ser executada em um terminal ou pode ser anexada ao final de ~/.profile, como está.

    De acordo com minhas observações, quando colocadas em ~/.profile, ambas as linhas, com ou sem a --replaceopção, parecem funcionar com um efeito semelhante.

    O resultado:

    Isso resulta em um shell gnome padrão de fábrica,

    • que usa o tema Adwaita (com cor primária azul, em vez do laranja do Ubuntu),
    • que usa o conjunto de ícones Yaru,
    • em que as fontes são estranhas,
    • em que todas as extensões estão desabilitadas (e provavelmente não encontradas),
    • em que o tema gnome-shell personalizado não tem efeito,
    • em que a doca aparece apenas junto com a síntese de atividades, acessada por Left Super,
    • em que Ctrl+ Alt+ t não abre um terminal,
    • em que os controles de logout e desligamento no canto superior direito do painel estão presentes, mas não têm nenhum efeito ao clicar neles (!)

    Depois de remover a GNOME_SHELL_JSlinha de ~/.profile, tive que reiniciar pelo terminal, emitindo sudo reboot now.

    Depois de retornar ao gnome-shell original instalado pelo Ubuntu padrão do sistema, descobri que todas as extensões ainda estavam desabilitadas; Eu tive que reativá-los um por um - pelo menos suas preferências ainda estavam armazenadas, elas não se perdiam.

    Conclusão:

    Posso imaginar que alguém poderia reintroduzir todas as personalizações e configurações específicas do Ubuntu em cima desta instância gnome-shell padrão de fábrica.

    Se você sabe quais são os passos necessários para conseguir isso, por favor poste uma resposta.

    • 0

relate perguntas

  • Como posso configurar a resolução de domínio curinga local (127.0.0.1) em 18.04..20.04?

Sidebar

Stats

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

    Existe um comando para listar todos os usuários? Também para adicionar, excluir, modificar usuários, no terminal?

    • 9 respostas
  • Marko Smith

    Como excluir um diretório não vazio no Terminal?

    • 4 respostas
  • Marko Smith

    Como descompactar um arquivo zip do Terminal?

    • 9 respostas
  • Marko Smith

    Como instalo um arquivo .deb por meio da linha de comando?

    • 11 respostas
  • Marko Smith

    Como instalo um arquivo .tar.gz (ou .tar.bz2)?

    • 14 respostas
  • Marko Smith

    Como listar todos os pacotes instalados

    • 24 respostas
  • Martin Hope
    Flimm Como posso usar o docker sem sudo? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    led-Zepp Como faço para salvar a saída do terminal em um arquivo? 2014-02-15 11:49:07 +0800 CST
  • Martin Hope
    ubuntu-nerd Como descompactar um arquivo zip do Terminal? 2011-12-11 20:37:54 +0800 CST
  • Martin Hope
    TheXed Como instalo um arquivo .deb por meio da linha de comando? 2011-05-07 09:40:28 +0800 CST
  • Martin Hope
    Ivan Como listar todos os pacotes instalados 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    David Barry Como determino o tamanho total de um diretório (pasta) na linha de comando? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher "Os seguintes pacotes foram retidos:" Por que e como resolvo isso? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford Como os PPAs podem ser removidos? 2010-07-30 01:09:42 +0800 CST

Hot tag

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

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