LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Arch (http://www.linuxquestions.org/questions/arch-29/)
-   -   su - user -c sets locale variables to "POSIX" (http://www.linuxquestions.org/questions/arch-29/su-user-c-sets-locale-variables-to-posix-924624/)

Gaidal 01-19-2012 10:05 AM

su - user -c sets locale variables to "POSIX"
 
I need to run SBCL in a UTF-8 environment in a VM running Arch. When I log in as the dedicated user and run the start script, it runs in UTF-8 and works fine. However I need to start it through a (bash) script, and when I run it with:

su - user -c /var/lib/.../start-script

it runs in an environment with all language variables set to POSIX, which causes errors.
I have set LOCALE to en_US.UTF-8 in rc.conf and checked locale.gen, and both the root and the user use this normally. Running locale as root shows all variables set properly to en_US.UTF-8.
Yet when I do su - user -c locale, it's all set to POSIX.

How is this possible, who is this user su runs as, what should I do?

EDIT: It works if I do:
su - user -c export LANG=en_US.UTF-8 && /var/lib/.../start-script
I don't understand why this is required.

EDIT: I read about some update late last year, which made /etc/profile.d/locale.sh obsolete (?) and made /etc/locale.conf take precedence over /etc/rc.conf. Following those instructions isn't working for me though. Moving locale.sh and using /etc/locale.conf sets all vars to POSIX for all users; if I keep it it's still the same as I originally described.

eeekster 01-20-2012 10:50 PM

Try it with "su" instead of "su -". The dash causes su to load the users's environment instead of using what you already have.

Gaidal 01-21-2012 12:02 AM

So omitting the hyphen makes it use the root's environment? It might kind of work since root does use unicode, but optimally I *want* su to load that user's environment, and that's not what it does with "su -". The user also has all locale variables set to unicode.

What I want to do is to run the process as that user, in that user's environment, from a bash script at boot time.

eeekster 01-21-2012 02:35 PM

Where is the user getting the LANG setting?

Gaidal 01-26-2012 12:06 AM

Sorry for the delay, celebrated the Chinese New Year...

I only have LOCALE=en_US.UTF-8 in /etc/rc.conf, and don't set any locale variables manually anywhere else, for any user... And it works everywhere except this
Code:

su - user -c
case.

Someone mentioned that perhaps su - user clears all environment settings, that would make more sense with these results.


All times are GMT -5. The time now is 01:18 PM.