Bạn có chắc chắn muốn xóa bài viết này không ?
Bạn có chắc chắn muốn xóa bình luận này không ?
Định nghĩa ứng dụng desktop trong Gnome và biến môi trường
Giới thiệu
Loay hoay cài Intellij trên CentOS 7 với Gnome, gặp 2 vấn đề thú vị nên viết lại cho bạn nào gặp phải thì nhanh chóng giải quyết được vấn đề luôn.
Phiên bản mình chạy là
- CentOS 7.2.1511
- Gnome: 3.14.4
Nếu bạn dùng CentOS hay các bản RHEL-Compatible khác thì bạn có thể tra cứu 2 nội dung trên như sau:
~ » cat /etc/centos-release
CentOS Linux release 7.2.1511 (Core)
~ » gnome-shell --version
GNOME Shell 3.14.4
Cài Intellij app
Intellij của JetBrain có thể nói là công cụ lập trình Java tốt nhất hiện nay. Mình cài chương trình này bằng cách download tarball và giải nén vào /home/Username/local/idea
Để khởi động Idea, ta chạy script do Jetbrain cung cấp tại
/home/Username/local/idea/bin/idea.sh
app khởi động như hình dưới đây!
Tuy vậy ta muốn sử dụng Launcher của Gnome (để chạy app nhanh và nhiều để tìm kiếm app) thay vì phải mở terminal để chạy script thế kia.
Trong Gnome 3, ta có thể lauch app bằng cách định nghĩa app dưới đường dẫn /usr/share/applications
Ta tạo 1 file /usr/share/applications/IDEA.desktop
với nội dung như sau:
[Desktop Entry]
Encoding=UTF-8
Name=intellj IDEA
Comment=Intellij IDEA IDE
Exec=/home/Username/local/idea/bin/idea.sh
Icon=/home/Username/local/idea/bin/idea.png
Terminal=false
Type=Application
Categories=GNOME;Application;Development;
StartupNotify=true
Kết quả là ta có thể lauch idea qua Launcher như hình vẽ dưới đây
Tuy vậy khi khởi động idea, idea sẽ báo lỗi không thể khởi động được do thiếu tools.jar trong JDK và yêu cầu định nghĩa JAVA_HOME
dù rằng mình đã định nghĩa JAVA_HOME
dưới .bashrc
Biến môi trường
Sau một hồi tìm hiểu, mình hiểu ra là dù mình định nghĩa biến môi trường ở .bashrc
đi nữa thì app khởi động qua IDEA.desktop không thể đọc được biến này. Gnome cung cấp 2 cách để người dùng có thể định nghĩa biến môi trường cho các app desktop là qua /etc/environment
và qua |.profile
Định nghĩa biến theo session
Phương pháp này thích hợp đối với các biến dành cho một user nào đó (không phải dành cho toàn bộ hệ thống). Ta định nghĩa biến môi trường thông qua 2 file ~/.pam_profile
và ~/.profile
.
~/.pam_environment
Ta định nghĩ biến bằng cú pháp sau
FOO=bar
PATH DEFAULT=${PATH}:/home/@{PAM_USER}/MyPrograms
Chú ý:
- dấu " không có ý nghĩa gì cả. Vì vậy ta không thể định nghĩa biến mà giá trị có dấu cách
- tại thời điểm file
~.pam_environment
được parse, một số biến môi trường có thể chưa có giá trị. - các ứng dụng GUI thỉnh thoảng sẽ ghi các biến môi trường vào file này, và vì thế các cài đặt của bạn có thể sẽ bị ghi đè.
~/.profile
File này sẽ được chạy bởi DisplayManager và vì vậy là nơi lý tưởng để cài các biến môi trường cần thiết cho GUI app. Cú pháp cài đặt biến trong file này giống hệt các biến trong .bashrc
export FOO=bar
export PATH DEFAULT=${PATH}:/home/@{PAM_USER}/MyPrograms
Định nghĩa biến cho toàn hệ thống
Một nơi khác mà ta có thể định nghĩa giá trị biến môi trường cho toàn hệ thống là /etc/environment
. Ta định nghĩa các biến bằng cách ghi giá trị vào file này. Cú pháp định nghĩa giống như định nghĩa trong .pam_environment
Ngoài ra ta có thể định nghĩa các biến trong các file shell ở đường dẫn /etc/profile.d/*.sh
. Các file này sẽ được chạy khi bash login shell khởi động (qua console hay ssh) hay qua DisplayManager.
Giải quyết bài toán khởi động IDEA
Với kiến thức có được, ta biết rằng JAVA_HOME
để được DisplayManager khởi động cần được cài đặt trong .profile
hay .pam_environment
hay /etc/environment
hay /etc/profile.d/*.sh
. Mình chỉ cần ứng dụng chạy cho bản thân user hiện tại nên mình chọn định nghĩa biến trong .profile
Mình ghi nội dung file này như sau:
export JAVA_HOME=/usr/java/default
logout và login và èn en: ứng dụng IDEA đã có thể khởi động qua GUI laucher như bình thường!
Tổng kết
Nói ngắn gọn có 2 tổng kết nhỏ qua bài này:
- Ta có thể định nghĩa 1 app desktop trên Gnome bằng cách định nghĩa file desktop dưới đường dẫn
/usr/share/applications/
- Có 4 chỗ định nghĩa biến môi trường mà DisplayManager có thể load được là
.profile
,.pam_environment
,/etc/environment
,etc/profile.d/*.sh
. Tùy hoàn cảnh mà ta có thể chọn chỗ định nghĩa cho phù hợp nhất.
Happy Hacking!





