Vraag Locale-variabelen hebben geen effect in de externe shell (perl: waarschuwing: de instelling van de locale is mislukt.)


Ik heb een nieuwe installatie van ubuntu 12.04. Toen ik met mijn verre server verbond kreeg ik fouten als dit:

~$ ssh example.com sudo aptitude upgrade
...
Traceback (most recent call last):
  File "/usr/bin/apt-listchanges", line 33, in <module>
    from ALChacks import *
  File "/usr/share/apt-listchanges/ALChacks.py", line 32, in <module>
    sys.stderr.write(_("Can't set locale; make sure $LC_* and $LANG are correct!\n"))
NameError: name '_' is not defined
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
    LANGUAGE = (unset),
    LC_ALL = (unset),
    LC_TIME = "de_DE.UTF-8",
    LC_MONETARY = "de_DE.UTF-8",
    LC_ADDRESS = "de_DE.UTF-8",
    LC_TELEPHONE = "de_DE.UTF-8",
    LC_NAME = "de_DE.UTF-8",
    LC_MEASUREMENT = "de_DE.UTF-8",
    LC_IDENTIFICATION = "de_DE.UTF-8",
    LC_NUMERIC = "de_DE.UTF-8",
    LC_PAPER = "de_DE.UTF-8",
    LANG = "en_US.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_ALL to default locale: No such file or directory
No packages will be installed, upgraded, or removed.
0 packages upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B of archives. After unpacking 0 B will be used.
...

Ik heb dit probleem niet wanneer ik verbinding maak met een oudere ubuntu-installatie. Dit wordt uitgevoerd vanuit mijn installatie ubuntu 12.04, LANG en TAAL zijn ingesteld

$ locale
LANG=de_DE.UTF-8
LANGUAGE=de_DE:en_GB:en
LC_CTYPE="de_DE.UTF-8"
LC_NUMERIC=de_DE.UTF-8
LC_TIME=de_DE.UTF-8
LC_COLLATE="de_DE.UTF-8"
LC_MONETARY=de_DE.UTF-8
LC_MESSAGES="de_DE.UTF-8"
LC_PAPER=de_DE.UTF-8
LC_NAME=de_DE.UTF-8
LC_ADDRESS=de_DE.UTF-8
LC_TELEPHONE=de_DE.UTF-8
LC_MEASUREMENT=de_DE.UTF-8
LC_IDENTIFICATION=de_DE.UTF-8
LC_ALL=

Weet iemand wat er is veranderd in ubuntu om dit foutbericht op externe servers te krijgen?


84
2018-05-30 18:51


oorsprong


mogelijk duplicaat van Hoe los ik mijn locale probleem op? - Fabby


antwoorden:


Dat komt omdat je locale in je lokale machine is ingesteld op Duits, die SSH doorstuurt naar en probeert te gebruiken op de server, maar je server heeft deze niet geïnstalleerd.

Je hebt verschillende opties:

  • Genereer de locale. Genereer de Duitse locale op de server met sudo locale-gen de.

  • Stop het doorsturen van locale van de client. Stuur de locale omgevingsvariabele niet door van uw lokale computer naar de server. U kunt het commentaar geven SendEnv LANG LC_* regel in de lokaal  /etc/ssh/ssh_config het dossier.

  • Stop met het accepteren van locale op de server. Accepteer de locale omgevingsvariabele van uw lokale machine naar de server niet. U kunt het commentaar geven AcceptEnv LANG LC_* regel in de afgelegen  /etc/ssh/sshd_config het dossier.

  • Stel de servertaal in op Engels. Stel de locale expliciet in op Engels op de server. U kunt bijvoorbeeld de volgende regels toevoegen aan uw afstandsbediening ~/.bashrc of ~/.profile bestanden:

    export LANGUAGE="en"
    export LANG="C"
    export LC_MESSAGES="C"
    

Als u geen roottoegang tot de server hebt, is de Stop het doorsturen van locale van de client optie is misschien de beste (en enige) manier om te gaan.


160
2018-05-30 19:19



Hah! Ik heb totaal het feit gemist dat hij de cliënt locale instellingen! Goed werk... - ish
Ik besloot om "Land van doorsturen van de client stopzetten". Werkt prima. Voor toekomstig gebruik: je kunt SendEnv-instellingen niet overschrijven van / etc / ssh / ssh_config in je lokale ~ / .ssh / config. Zien bugzilla.mindrot.org/show_bug.cgi?id=1285 - Janning
Gecombineerd met bugs.php.net/bug.php?id=18556, Kan het verzenden van de locales van SSH echte problemen veroorzaken (en eigenlijk voor mij veroorzaken), zie bugzilla.mindrot.org/show_bug.cgi?id=1285#c9 ... - Halil Özgür
In mijn geval, locale instellen in ~/.profile mijn probleem opgelost. Bedankt. - Francisco
Als de server geen Duitse locale heeft, waarom is het dan acceptabel dat deze de door de gebruiker gevraagde waarde overschrijft LANG met iets anders? .. - Mikhail T.


Dit kan soms gebeuren bij nieuwe minimale / alternatieve installaties of in andere situaties. De oplossing is vrij eenvoudig. Probeer deze, in de volgende volgorde, na elk te testen om te kijken of de situatie is opgelost:

1. Configureer de locales opnieuw

  • sudo dpkg-reconfigure locales
    • als dat niet werkt,

2. Installeer locale taalpakket opnieuw

  • sudo apt-get --reinstall install language-pack-de
    • als dat niet werkt,

3. Plaatsinstellingen handmatig forceren (persistent)

  • sudo update-locale LC_ALL=de_DE.UTF-8 LANG=de_DE.UTF-8

26
2017-12-21 14:12



Ik heb een JVM-probleem en ik probeer ook de systeemlocale in 12.04 in te stellen. Het enige probleem is dat ik niet de LC_ALL kan instellen, wat ik ook probeer, locales toont het nog steeds als leeg. - Dark Star1


Reageer op de regel SendEnv LANG LC_* in /etc/ssh/ssh_config, dus het zou moeten lijken op:

#SendEnv LANG LC_*

14
2018-01-22 02:46





Het probleem

Standaard stuurt de ssh-clientopdracht locale gerelateerde omgevingsvariabelen door naar de SSH-server. Dat staat vermeld in /etc/ssh/ssh_config aan de kant van de klant:

Host *
    SendEnv LANG LC_*

En standaard accepteert de SSH-server ze (in /etc/ssh/sshd_config op de server):

AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE

Dus als er omgevingsgerelateerde omgevingsvariabelen in uw shell zijn, worden deze ingevuld aan de SSH-sessie aan de serverzijde.

Helaas, de SendEnv optie is cumulatieve. Volgens man 5 ssh_config:

 SendEnv
         ... Multiple environment variables may be separated
         by whitespace or spread across multiple SendEnv directives.  The
         default is not to send any environment variables.

wat betekent dat het niet kan zijn overschreven.

De oplossing

Soms is het onmogelijk of onverstandig om een ​​systeembrede configuratie te wijzigen, vooral aan de serverzijde. U mag echter bypass het. En dat is de bijwerking van de -F optie in ssh-opdracht. Volgens man ssh:

 -F configfile
         Specifies an alternative per-user configuration file.  If a con-
         figuration file is given on the command line, the system-wide
         configuration file (/etc/ssh/ssh_config) will be ignored.  The
         default for the per-user configuration file is ~/.ssh/config.

Standaard het configuratiebestand per gebruiker ~/.ssh/config wordt gebruikt als het aanwezig is. Maar je kan expliciet opgeven op de opdrachtregel omzeilen /etc/ssh/ssh_config:

$ touch ~/.ssh/config
$ ssh -F ~/.ssh/config your_user@your_host

Het zou handiger zijn als je een alias in maakt ~/.bashrc:

alias ssh="ssh -F ~/.ssh/config"

Op deze manier is de standaardinstelling SendEnvrichtlijnen in de systeembrede configuratie zijn niet effectief, waardoor standaard geen omgevingsvariabelen naar de SSH-server worden verzonden.


7
2018-02-29 10:30



Houd er rekening mee dat het systeemconfiguratiebestand in / etc / ssh / config extra regels kan bevatten die u in uw gebruikersconfiguratie wilt behouden. Je moet ze kopiëren naar je gebruikersconfiguratiebestand in ~ / .ssh / config om die instellingen te behouden. - Steven Maude


Ik had een soortgelijk probleem. Mijn oplossing was om de SendEnv lijnen in /etc/ssh/ssh_config (aangezien deze niet kunnen worden overschreven) en om de volgende vermelding toe te voegen ~/.ssh/config:

Host *,!<somehost>
    SendEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
    SendEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
    SendEnv LC_IDENTIFICATION LC_ALL LANGUAGE
    SendEnv XMODIFIERS    

met <somehost> de hostnaam zijn waarnaar ik niet wil om het even welke milieuvariabele verzenden.


4