diskio / diskiograph em Conky só entende nomes de dispositivos físicos?

1

Caso isso aconteça, pode ser um grande problema nas distribuições Linux modernas, já que os nomes dos dispositivos são frequentemente atribuídos arbitrariamente. Portanto, se você não tiver mais de dois HDDs em seu sistema, mas dois flash drives USB ficarem presos em suas portas, as coisas podem ficar assim após a inicialização:

/dev/sda .. HDD #1
/dev/sdb .. USB flash drive #1
/dev/sdc .. USB flash drive #2
/dev/sdd .. HDD #2

Eu pesquisei alto e baixo e tentei vários hacks para o meu .conkyrc sem sucesso. Parece que não funciona.

Eu até pensei em "criar" o formato necessário para o conky executando um comando do sistema, mas mesmo isso falhou. Em bash , isso pode ser alcançado por

$ basename $(readlink /dev/disk/by-label/mydisklabel)

Apesar de o conky permitir a execução de comandos do sistema, parece que nas opções do {diskio} / {diskiograph}, isso não é possível.
Então, o seguinte NÃO funcionará:

${diskio /dev/${execp basename $(readlink /dev/disk/by-label/mydisklabel)}}

Nem a variante com o UUID funciona (não mostrada aqui).
Algum de vocês já conseguiu "ensinar" isso ao conky? É tão incrivelmente versátil, mas é quase inacreditável que (comparado aos bons tempos) udev e os amigos não vão mais manter unidades em uma certa ordem, mas embaralhe-os novamente em cada seqüência de inicialização, enquanto ferramentas (GKrellM não é nada melhor !) insistir teimosamente em nomes de drives / dispositivos físicos.

    
por syntaxerror 23.08.2014 / 15:52

2 respostas

2

Para usar os caminhos /dev/disk/by-?? completos, da seguinte forma:

${diskio /dev/disk/by-label/mydisklabel}

você precisa ter o conky versão 1.9.1 ou posterior, que é conhecido como conky-ng . Do Fedora 20 em diante, está disponível como o pacote conky . O Ubuntu ainda está usando a versão mais antiga (como no Ubuntu 14.04), portanto, você precisará compilar conky-ng . O último também é verdadeiro para o Arch Linux.

A linha Disk IO na captura de tela abaixo mostra o trabalho com uma entrada by-label em .conkyrc , enquanto find . está sendo executado em um terminal.

Observe que não deve haver um espaço entre o último caractere do caminho e a chave de fechamento ( } ), caso contrário conky reclamará do caminho não encontrado.

    
por 23.08.2014 / 17:39
0

Depois de olhar o código-fonte, parece que a resolução de nomes para links simbólicos é feita de maneira relativa. O programa usa o readlink (2) onde deve usar o caminho real (3). Ao usar /dev/disk/by-id/wwn-* , ele resolve para ../../sd? , que falha se o diretório de trabalho atual do conky não for /dev/disk/by-id .

Para usar o rótulo, você pode usar label:some_disk_label e ele deve funcionar. Para obter by-id / by-uuid, o autor teria que aceitar minha solicitação de pull no link no qual eu convertido o método de resolução do caminho do disco para usar o caminho real (3).

    
por 21.04.2016 / 02:57

Tags