[우분투 16.04] 32bit library를 64 bit 우분투 16.04에 설치하는 방법

by Blogger 하얀쿠아
2017. 12. 13. 21:03 소프트웨어 Note/Linux

개요

우분투라는 운영체제는 32 bit CPU용 버전과 64 bit CPU용 버전이 제공된다.

그런데 종종, 32bit 용으로 빌드 된 실행파일을 64 bit 용 우분투에서 실행시켜야 하는 경우가 있다.

그리고 우분투 12.04 LTS의 64bit 버전에서는 꼼수로써, ia32-libs 라는 패키지를 제공해서, 32bit용 실행파일을 실행 시킬 수 있도록 했었다.


그러나 우분투 16.04 에서는 ia32-libs 패키지가 deprecated 처리가 되었다.

그 이유는 MultiArch를 사용하도록 유도하기 위해서 인 듯 싶다.


하지만 방법이 있다.

아래와 같은 순서로 MultiArch를 설치하고, 32 bit 용 실행파일을 우분투 16.04 의 64bit 버전 에서 실행되도록 할 수 있다.



i386 아키텍쳐 활성화 하기


root 권한으로 아래 명령을 통해 i386 아키텍쳐를 활성화 시킨다.


$ sudo dpkg --add-architecture i386
$ sudo apt-get update



32-bit 라이브러리 설치하기


root 권한으로 아래 명령을 통해 32-bit 라이브러리를 설치한다.


$ apt-get install libc6:i386 libstdc++6:i386


설치 과정의 console 로그

아래와 같이 설치가 진행된다.

참고 바란다.


$ sudo apt-get install libc6:i386 libstdc++6:i386
Reading package lists... Done
Building dependency tree      
Reading state information... Done
The following additional packages will be installed:
  cpp-5 g++-5 gcc-5 gcc-5-base gcc-5-base:i386 gcc-6-base:i386 libasan2 libatomic1 libc-dev-bin libc6 libc6-dbg libc6-dev libcc1-0 libcilkrts5 libgcc-5-dev libgcc1:i386 libgomp1 libitm1 liblsan0 libmpx0 libquadmath0 libstdc++-5-dev
  libstdc++6 libtsan0 libubsan0
Suggested packages:
  gcc-5-locales g++-5-multilib gcc-5-doc libstdc++6-5-dbg gcc-5-multilib libgcc1-dbg libgomp1-dbg libitm1-dbg libatomic1-dbg libasan2-dbg liblsan0-dbg libtsan0-dbg libubsan0-dbg libcilkrts5-dbg libmpx0-dbg libquadmath0-dbg
  glibc-doc glibc-doc:i386 locales:i386 libstdc++-5-doc
The following NEW packages will be installed:
  gcc-5-base:i386 gcc-6-base:i386 libc6:i386 libgcc1:i386 libstdc++6:i386
The following packages will be upgraded:
  cpp-5 g++-5 gcc-5 gcc-5-base libasan2 libatomic1 libc-dev-bin libc6 libc6-dbg libc6-dev libcc1-0 libcilkrts5 libgcc-5-dev libgomp1 libitm1 liblsan0 libmpx0 libquadmath0 libstdc++-5-dev libstdc++6 libtsan0 libubsan0
22 upgraded, 5 newly installed, 0 to remove and 424 not upgraded.
Need to get 41.1 MB of archives.
After this operation, 12.1 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://kr.archive.ubuntu.com/ubuntu xenial-updates/main amd64 libc6-dbg amd64 2.23-0ubuntu9 [3,683 kB]
Get:2 http://kr.archive.ubuntu.com/ubuntu xenial-updates/main amd64 libc6-dev amd64 2.23-0ubuntu9 [2,082 kB]
Get:3 http://kr.archive.ubuntu.com/ubuntu xenial-updates/main amd64 libc-dev-bin amd64 2.23-0ubuntu9 [68.6 kB]
Get:4 http://kr.archive.ubuntu.com/ubuntu xenial-updates/main amd64 libc6 amd64 2.23-0ubuntu9 [2,586 kB]
Get:5 http://kr.archive.ubuntu.com/ubuntu xenial-updates/main amd64 libcc1-0 amd64 5.4.0-6ubuntu1~16.04.5 [38.8 kB]
Get:6 http://kr.archive.ubuntu.com/ubuntu xenial-updates/main amd64 libgomp1 amd64 5.4.0-6ubuntu1~16.04.5 [55.1 kB]
Get:7 http://kr.archive.ubuntu.com/ubuntu xenial-updates/main amd64 libitm1 amd64 5.4.0-6ubuntu1~16.04.5 [27.4 kB]
Get:8 http://kr.archive.ubuntu.com/ubuntu xenial-updates/main amd64 libatomic1 amd64 5.4.0-6ubuntu1~16.04.5 [8,920 B]
Get:9 http://kr.archive.ubuntu.com/ubuntu xenial-updates/main amd64 libasan2 amd64 5.4.0-6ubuntu1~16.04.5 [264 kB]
Get:10 http://kr.archive.ubuntu.com/ubuntu xenial-updates/main amd64 liblsan0 amd64 5.4.0-6ubuntu1~16.04.5 [105 kB]
Get:11 http://kr.archive.ubuntu.com/ubuntu xenial-updates/main amd64 libtsan0 amd64 5.4.0-6ubuntu1~16.04.5 [244 kB]
Get:12 http://kr.archive.ubuntu.com/ubuntu xenial-updates/main amd64 libubsan0 amd64 5.4.0-6ubuntu1~16.04.5 [95.3 kB]
Get:13 http://kr.archive.ubuntu.com/ubuntu xenial-updates/main amd64 libcilkrts5 amd64 5.4.0-6ubuntu1~16.04.5 [40.1 kB]
Get:14 http://kr.archive.ubuntu.com/ubuntu xenial-updates/main amd64 libmpx0 amd64 5.4.0-6ubuntu1~16.04.5 [9,786 B]
Get:15 http://kr.archive.ubuntu.com/ubuntu xenial-updates/main amd64 libquadmath0 amd64 5.4.0-6ubuntu1~16.04.5 [131 kB]
Get:16 http://kr.archive.ubuntu.com/ubuntu xenial-updates/main amd64 g++-5 amd64 5.4.0-6ubuntu1~16.04.5 [8,435 kB]
Get:17 http://kr.archive.ubuntu.com/ubuntu xenial-updates/main amd64 libstdc++-5-dev amd64 5.4.0-6ubuntu1~16.04.5 [1,430 kB]
Get:18 http://kr.archive.ubuntu.com/ubuntu xenial-updates/main amd64 libgcc-5-dev amd64 5.4.0-6ubuntu1~16.04.5 [2,226 kB]
Get:19 http://kr.archive.ubuntu.com/ubuntu xenial-updates/main amd64 gcc-5 amd64 5.4.0-6ubuntu1~16.04.5 [8,638 kB]
Get:20 http://kr.archive.ubuntu.com/ubuntu xenial-updates/main amd64 cpp-5 amd64 5.4.0-6ubuntu1~16.04.5 [7,786 kB]
Get:21 http://kr.archive.ubuntu.com/ubuntu xenial-updates/main amd64 gcc-5-base amd64 5.4.0-6ubuntu1~16.04.5 [17.1 kB]
Get:22 http://kr.archive.ubuntu.com/ubuntu xenial-updates/main amd64 libstdc++6 amd64 5.4.0-6ubuntu1~16.04.5 [393 kB]
Get:23 http://kr.archive.ubuntu.com/ubuntu xenial/main i386 gcc-6-base i386 6.0.1-0ubuntu1 [14.3 kB]
Get:24 http://kr.archive.ubuntu.com/ubuntu xenial/main i386 libgcc1 i386 1:6.0.1-0ubuntu1 [46.8 kB]
Get:25 http://kr.archive.ubuntu.com/ubuntu xenial-updates/main i386 libc6 i386 2.23-0ubuntu9 [2,269 kB]
Get:26 http://kr.archive.ubuntu.com/ubuntu xenial-updates/main i386 gcc-5-base i386 5.4.0-6ubuntu1~16.04.5 [17.1 kB]                                                                                                                   
Get:27 http://kr.archive.ubuntu.com/ubuntu xenial-updates/main i386 libstdc++6 i386 5.4.0-6ubuntu1~16.04.5 [418 kB]                                                                                                                    
Fetched 41.1 MB in 6s (6,517 kB/s)                                                                                                                                                                                                     
Preconfiguring packages ...
(Reading database ... 195047 files and directories currently installed.)
Preparing to unpack .../libc6-dbg_2.23-0ubuntu9_amd64.deb ...
Unpacking libc6-dbg:amd64 (2.23-0ubuntu9) over (2.23-0ubuntu5) ...
Preparing to unpack .../libc6-dev_2.23-0ubuntu9_amd64.deb ...
Unpacking libc6-dev:amd64 (2.23-0ubuntu9) over (2.23-0ubuntu5) ...
Preparing to unpack .../libc-dev-bin_2.23-0ubuntu9_amd64.deb ...
Unpacking libc-dev-bin (2.23-0ubuntu9) over (2.23-0ubuntu5) ...
Preparing to unpack .../libc6_2.23-0ubuntu9_amd64.deb ...
Unpacking libc6:amd64 (2.23-0ubuntu9) over (2.23-0ubuntu5) ...
Selecting previously unselected package libc6:i386.
Preparing to unpack .../libc6_2.23-0ubuntu9_i386.deb ...
Unpacking libc6:i386 (2.23-0ubuntu9) ...
Setting up libc6:amd64 (2.23-0ubuntu9) ...
Processing triggers for libc-bin (2.23-0ubuntu5) ...
Processing triggers for man-db (2.7.5-1) ...
Selecting previously unselected package libgcc1:i386.
(Reading database ... 195351 files and directories currently installed.)
Preparing to unpack .../libgcc1_1%3a6.0.1-0ubuntu1_i386.deb ...
Unpacking libgcc1:i386 (1:6.0.1-0ubuntu1) ...
Selecting previously unselected package gcc-6-base:i386.
Preparing to unpack .../gcc-6-base_6.0.1-0ubuntu1_i386.deb ...
Unpacking gcc-6-base:i386 (6.0.1-0ubuntu1) ...
Processing triggers for libc-bin (2.23-0ubuntu5) ...
Setting up gcc-6-base:i386 (6.0.1-0ubuntu1) ...
Setting up libgcc1:i386 (1:6.0.1-0ubuntu1) ...
Setting up libc6:i386 (2.23-0ubuntu9) ...
Processing triggers for libc-bin (2.23-0ubuntu5) ...
(Reading database ... 195356 files and directories currently installed.)
Preparing to unpack .../libcc1-0_5.4.0-6ubuntu1~16.04.5_amd64.deb ...
Unpacking libcc1-0:amd64 (5.4.0-6ubuntu1~16.04.5) over (5.4.0-6ubuntu1~16.04.4) ...
Preparing to unpack .../libgomp1_5.4.0-6ubuntu1~16.04.5_amd64.deb ...
Unpacking libgomp1:amd64 (5.4.0-6ubuntu1~16.04.5) over (5.4.0-6ubuntu1~16.04.4) ...
Preparing to unpack .../libitm1_5.4.0-6ubuntu1~16.04.5_amd64.deb ...
Unpacking libitm1:amd64 (5.4.0-6ubuntu1~16.04.5) over (5.4.0-6ubuntu1~16.04.4) ...
Preparing to unpack .../libatomic1_5.4.0-6ubuntu1~16.04.5_amd64.deb ...
Unpacking libatomic1:amd64 (5.4.0-6ubuntu1~16.04.5) over (5.4.0-6ubuntu1~16.04.4) ...
Preparing to unpack .../libasan2_5.4.0-6ubuntu1~16.04.5_amd64.deb ...
Unpacking libasan2:amd64 (5.4.0-6ubuntu1~16.04.5) over (5.4.0-6ubuntu1~16.04.4) ...
Preparing to unpack .../liblsan0_5.4.0-6ubuntu1~16.04.5_amd64.deb ...
Unpacking liblsan0:amd64 (5.4.0-6ubuntu1~16.04.5) over (5.4.0-6ubuntu1~16.04.4) ...
Preparing to unpack .../libtsan0_5.4.0-6ubuntu1~16.04.5_amd64.deb ...
Unpacking libtsan0:amd64 (5.4.0-6ubuntu1~16.04.5) over (5.4.0-6ubuntu1~16.04.4) ...
Preparing to unpack .../libubsan0_5.4.0-6ubuntu1~16.04.5_amd64.deb ...
Unpacking libubsan0:amd64 (5.4.0-6ubuntu1~16.04.5) over (5.4.0-6ubuntu1~16.04.4) ...
Preparing to unpack .../libcilkrts5_5.4.0-6ubuntu1~16.04.5_amd64.deb ...
Unpacking libcilkrts5:amd64 (5.4.0-6ubuntu1~16.04.5) over (5.4.0-6ubuntu1~16.04.4) ...
Preparing to unpack .../libmpx0_5.4.0-6ubuntu1~16.04.5_amd64.deb ...
Unpacking libmpx0:amd64 (5.4.0-6ubuntu1~16.04.5) over (5.4.0-6ubuntu1~16.04.4) ...
Preparing to unpack .../libquadmath0_5.4.0-6ubuntu1~16.04.5_amd64.deb ...
Unpacking libquadmath0:amd64 (5.4.0-6ubuntu1~16.04.5) over (5.4.0-6ubuntu1~16.04.4) ...
Preparing to unpack .../g++-5_5.4.0-6ubuntu1~16.04.5_amd64.deb ...
Unpacking g++-5 (5.4.0-6ubuntu1~16.04.5) over (5.4.0-6ubuntu1~16.04.4) ...
Preparing to unpack .../libstdc++-5-dev_5.4.0-6ubuntu1~16.04.5_amd64.deb ...
Unpacking libstdc++-5-dev:amd64 (5.4.0-6ubuntu1~16.04.5) over (5.4.0-6ubuntu1~16.04.4) ...
Preparing to unpack .../libgcc-5-dev_5.4.0-6ubuntu1~16.04.5_amd64.deb ...
Unpacking libgcc-5-dev:amd64 (5.4.0-6ubuntu1~16.04.5) over (5.4.0-6ubuntu1~16.04.4) ...
Preparing to unpack .../gcc-5_5.4.0-6ubuntu1~16.04.5_amd64.deb ...
Unpacking gcc-5 (5.4.0-6ubuntu1~16.04.5) over (5.4.0-6ubuntu1~16.04.4) ...
Preparing to unpack .../cpp-5_5.4.0-6ubuntu1~16.04.5_amd64.deb ...
Unpacking cpp-5 (5.4.0-6ubuntu1~16.04.5) over (5.4.0-6ubuntu1~16.04.4) ...
Preparing to unpack .../gcc-5-base_5.4.0-6ubuntu1~16.04.5_amd64.deb ...
Unpacking gcc-5-base:amd64 (5.4.0-6ubuntu1~16.04.5) over (5.4.0-6ubuntu1~16.04.4) ...
Selecting previously unselected package gcc-5-base:i386.
Preparing to unpack .../gcc-5-base_5.4.0-6ubuntu1~16.04.5_i386.deb ...
Unpacking gcc-5-base:i386 (5.4.0-6ubuntu1~16.04.5) ...
Processing triggers for libc-bin (2.23-0ubuntu5) ...
Processing triggers for man-db (2.7.5-1) ...
Setting up gcc-5-base:amd64 (5.4.0-6ubuntu1~16.04.5) ...
Setting up gcc-5-base:i386 (5.4.0-6ubuntu1~16.04.5) ...
(Reading database ... 195359 files and directories currently installed.)
Preparing to unpack .../libstdc++6_5.4.0-6ubuntu1~16.04.5_amd64.deb ...
Unpacking libstdc++6:amd64 (5.4.0-6ubuntu1~16.04.5) over (5.4.0-6ubuntu1~16.04.4) ...
Selecting previously unselected package libstdc++6:i386.
Preparing to unpack .../libstdc++6_5.4.0-6ubuntu1~16.04.5_i386.deb ...
Unpacking libstdc++6:i386 (5.4.0-6ubuntu1~16.04.5) ...
Processing triggers for libc-bin (2.23-0ubuntu5) ...
Setting up libstdc++6:amd64 (5.4.0-6ubuntu1~16.04.5) ...
Setting up libstdc++6:i386 (5.4.0-6ubuntu1~16.04.5) ...
Setting up libc6-dbg:amd64 (2.23-0ubuntu9) ...
Setting up libc-dev-bin (2.23-0ubuntu9) ...
Setting up libc6-dev:amd64 (2.23-0ubuntu9) ...
Setting up libcc1-0:amd64 (5.4.0-6ubuntu1~16.04.5) ...
Setting up libgomp1:amd64 (5.4.0-6ubuntu1~16.04.5) ...
Setting up libitm1:amd64 (5.4.0-6ubuntu1~16.04.5) ...
Setting up libatomic1:amd64 (5.4.0-6ubuntu1~16.04.5) ...
Setting up libasan2:amd64 (5.4.0-6ubuntu1~16.04.5) ...
Setting up liblsan0:amd64 (5.4.0-6ubuntu1~16.04.5) ...
Setting up libtsan0:amd64 (5.4.0-6ubuntu1~16.04.5) ...
Setting up libubsan0:amd64 (5.4.0-6ubuntu1~16.04.5) ...
Setting up libcilkrts5:amd64 (5.4.0-6ubuntu1~16.04.5) ...
Setting up libmpx0:amd64 (5.4.0-6ubuntu1~16.04.5) ...
Setting up libquadmath0:amd64 (5.4.0-6ubuntu1~16.04.5) ...
Setting up cpp-5 (5.4.0-6ubuntu1~16.04.5) ...
Setting up libgcc-5-dev:amd64 (5.4.0-6ubuntu1~16.04.5) ...
Setting up gcc-5 (5.4.0-6ubuntu1~16.04.5) ...
Setting up libstdc++-5-dev:amd64 (5.4.0-6ubuntu1~16.04.5) ...
Setting up g++-5 (5.4.0-6ubuntu1~16.04.5) ...
Processing triggers for libc-bin (2.23-0ubuntu5) ...


결론

64bit 버전의 우분투 16.04(Ubuntu 16.04) 에서 32bit executable file을 실행하고자 하는 경우가 있는데,

기존 우분투 12.04(Ubuntu 12.04)에서 사용하던 패키지인 ia32-libs 를 설치하기는 어렵다.

대신 libc6:i386libstdc++6:i386, 이렇게 두개의 패키지를 설치함으로써 원하는 바를 달성할 수 있다.

이 댓글을 비밀 댓글로

shell prompt에 git branch 이름 표시 / 색상으로 status 표시

by Blogger 하얀쿠아
2017. 11. 23. 01:10 소프트웨어 Note/Linux

git 기본 사용시 불편한 점

여러 소스코드 형상관리 툴 중 git을 주로 사용하는데, linux shell prompt에서 사용하다 보면, 불편한 경우가 있다.

아래 두가지 경우였다.


1. 현재 git directory의 branch가 어디인지?

2. 현재 git directory의 변경사항이 있는지?


기본 상태에서...

1번의 경우는, 'git branch' 라고 명령을 입력해야 확인 가능하다.

2번의 경우는 'git status' 라고 명령을 입력해야 확인 가능하다.


이게 은근 귀찮다.

그래서 shell prompt에서 git directory로 진입을 하면 branch명을 표시하고, 해당 branch명을 다시 status에 따라 녹색/빨간색으로 표시하도록 하고자 한다.



.bashrc 파일 수정


HOME directory의 '.bashrc' 파일에 몇가지 추가 및 수정을 하면 된다.
c_cyan=`tput setaf 6`
c_red=`tput setaf 1`
c_green=`tput setaf 2`
c_sgr0=`tput sgr0`

parse_git_branch ()
{
   if git rev-parse --git-dir >/dev/null 2>&1
   then
      gitver=$(git branch 2>/dev/null| sed -n '/^\*/s/^\* //p')
   else
      return 0
   fi
   echo -e $gitver
}

branch_color ()
{
   if git rev-parse --git-dir >/dev/null 2>&1
   then
      color=""
      if git diff --quiet 2>/dev/null >&2
      then
         color="${c_green}"
      else
         color=${c_red}
      fi
   else
      return 0
   fi
   echo -ne $color
}

.... 중략 ....

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
#    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\[${c_sgr0}\] (\[$(branch_color)\]$(parse_git_branch)\[${c_sgr0}\])\$ '
fi



붉게 표시한 부분이 실제 shell prompt에 git branch 이름과 색상을 결정하고 표시하는 부분이다.


branch_color( ), parse_git_branch( ) 는 새로 추가한 함수이다. 

c_cyan, c_red, c_green, c_sgr0 는 새로 추가한 변수이고, 색상을 결정한다.


작업하면서 헷갈릴 수 있는데, PS1가 shell prompt에 표시되는 내용을 결정한다.


\u : 사용자명 

\h : 호스트명

\W : 현재 디랙토리

\w : 현재 경로


이렇게 나타내게 된다. 이외에도 있을 것 같은데, 나는 더이상 필요없어서 알아보진 않았다. 각자 자신의 입맛에 맛게 수정하면 될 것 같다.

PS1에서 branch_color와 parse_git_branch함수를 호출하도록 하여, git 저장소를 사용하는 디렉토리이면 현재의 브랜치명을 표시하고, 수정내용이 있으면 빨간색으로 표시하며 그외에는 녹색으로 표시하도록 하는 내용 이다.


수정 한 뒤, 적용이 잘 되었는지 확인하려면, terminal을 닫은 후 다시 실행 하던가, 아래 커맨드로 .bashrc의 변경된 내용을 현재 terminal에 적용하면 된다.


source ~/.bashrc


적용된 모습

적용 되면 아래와 같이 동작한다.



아무런 수정사항이 없는 경우, 녹색으로 branch 이름이 표시된다.



뭔가 diff가 있는 경우, 빨간색으로 branch 이름이 표시된다.





이 댓글을 비밀 댓글로
    • 나그네
    • 2018.03.18 00:49
    긋입니다.. 잘적용됩니다.
    • dd
    • 2020.12.31 14:40
    에러 개많네

[우분투 16.04] 부팅시 프로그램을 자동으로 시작하도록 설정하는 방법 (How to add auto startup applications in Ubuntu 16.04)

by Blogger 하얀쿠아
2017. 11. 12. 02:09 소프트웨어 Note/Linux

프로그램 자동실행 이유

우분투 16.04 이 설치된 PC를 켤때 synergy client를 자동으로 실행되도록 하고 싶다.

지금은 우분투 PC가 켜지면, shell prompt를 띄우고, 명령어를 직접 입력해서 synergy client를 실행시켜 synergy server PC에 연결되도록 수동으로 사용하고 있다.


이 과정이 번거롭기 때문에, 자동화 하고자 한다.


참고로 synergy는 서로다른 2대 이상의 PC를 연결시켜서, 한쌍의 키보드와 마우스를 이용해 연결된 PC 모두를 제어하도록 도와주는 프로그램이다.

본 포스팅에서 설명하고자 하는 것은, 우분투 16.04 PC가 synergy client가 되고, 그외의 PC (윈도우 혹은 Mac 혹은 또다른 우분투)가 synergy server가 되는 상황이다.


auto startup 설정 방법

STEP 1: 프로그램을 실행시키기 위한 커맨드라인 명령어 찾기

우선, 시작 목록에 프로그램을 추가하기 위해서는, 해당 프로그램이 시작되는 명령어를 알아야 한다.


synergy의 경우, synergyc 가 client이다.

--help 옵션을 통해 지원하는 옵션들을 살펴보자.


jeon@Jeon-PC:~$ synergyc --help
Usage: synergyc [--yscroll ] [--display ] [--no-xinitthreads] [--daemon|--no-daemon] [--name ] [--restart|--no-restart] [--debug ] 

Connect to a synergy mouse/keyboard sharing server.

  -d, --debug       filter out log messages with priority below level.
                             level may be: FATAL, ERROR, WARNING, NOTE, INFO,
                             DEBUG, DEBUG1, DEBUG2.
  -n, --name  use screen-name instead the hostname to identify
                             this screen in the configuration.
  -1, --no-restart         do not try to restart on failure.
*     --restart            restart the server automatically if it fails.
  -l  --log          write log messages to file.
      --no-tray            disable the system tray icon.
      --enable-drag-drop   enable file drag & drop.
      --enable-crypto      enable the crypto (ssl) plugin.
      --display   connect to the X server at 
      --no-xinitthreads    do not call XInitThreads()
  -f, --no-daemon          run in the foreground.
*     --daemon             run as a daemon.
      --yscroll     defines the vertical scrolling delta, which is
                             120 by default.
  -h, --help               display this help and exit.
      --version            display version information and exit.

* marks defaults.

The server address is of the form: [][:].  The hostname
must be the address or hostname of the server.  The port overrides the
default port, 24800.

synergyc: a server address or name is required
Try `synergyc --help' for more information.


살펴보니, daemon으로 실행하고, debug level로 DEBUG 정도 줘서 로그좀 남기도록 하면 될 것 같아 보인다.

최종적으로 아래 명령으로 자동 실행 시키기로 결정했다.


/usr/bin/synergyc --daemon --debug DEBUG --name Jeon-PC 192.168.1.121:24800

Jeon-PC 부분은 본인이 사용하려는 'screen name' 을 입력하면 된다.

192.168.1.121 부분은 본인이 연결하려는 synergy server의 IP address를 입력하면 된다.

24800 부분은 본인이 연결하려는 synergy server의 Port number를 입력하면된다.



STEP 2: 시작 프로그램 설정하기

step1 에서 결정한 시작시킬 명령어를 입력할 차례이다.


Dash 메뉴에서 'Startup Applications' 를 찾아서 실행한다. Dash 메뉴는 '윈도우 키' 를 누르거나, sidebar에서 우분투 아이콘 버튼을 누르면 나오는 검색 윈도우를 말한다.




실행된 이후, '추가(Add)' 버튼을 누른 뒤, '명령어(Command)' 부분에 위에서 결정했던 명령어를 복사/붙여넣는다.

이름(Name)과 설명(Commnet) 부분은 아무것이나 입력하고 싶은것을 넣을 수 있다.




모두 입력했으면, '저장(Save)'을 누른 뒤, 입력한 항목이 생겼는지 확인한다.




다음번 우분투 PC를 재시작하게되면, synergy client 프로그램이 자동으로 실행되어, 설정한 IP주소의 synergy server로 연결되는 것을 확인 할 수 있다.


명령어로 확인 방법

이렇게 우분투의 GUI로 추가한 자동 시작 프로그램은 shell terminal 상에서도 확인이 가능하다.


[HOME]/.config/autostart 아래에서 확인해 보면, 추가한 항목이 존재함을 알 수 있다.


jeon@Jeon-PC:~/.config/autostart$ cat synergyc.desktop 
[Desktop Entry]
Type=Application
Exec=\s/usr/bin/synergyc --daemon --debug DEBUG --name Jeon-PC 192.168.1.121:24800
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name[en_US]=Synergy
Name=Synergy
Comment[en_US]=Keyboard & Mouse Sharing
Comment=Keyboard & Mouse Sharing


이 댓글을 비밀 댓글로

[우분투] 우분투 16.04 런처(Launcher) 위치 바꾸기

by Blogger 하얀쿠아
2017. 7. 15. 22:46 소프트웨어 Note/Linux

개요

우분투에는 '런처(Launcher)'라 불리는 것이 있다.

MS의 윈도우 운영체제와 비교하자면, '작업표시줄' 과 비슷한 것 쯤으로 이해하면 쉽다.


그동안의 우분투 LTS 버전들에서는 이 런처의 위치가 왼쪽에 세로로 고정되어 있었다.

아래 그림과 같이 말이다.


우분투 런처가 왼쪽에 세로로 위치한 모습



런처 위치 변경 명령어

우분투 16.04 에서는 드디어 런처의 위치를 변경할 수 있게 되었다.

방법은 간단하다. shell에서 명령어 한줄이면 된다.


/* 런처를 왼쪽에 위치함 */
$ gsettings set com.canonical.Unity.Launcher launcher-position Left

/* 런처를 아래쪽에 위치함 */
$ gsettings set com.canonical.Unity.Launcher launcher-position Bottom



런처를 아래에 위치시킨 모습


 

사진에서와 같이 이렇게 런처의 위치가 아래로 내려가는게 가능해졌다.

개인적으로, 런처의 위치는 왼쪽보다는 아래쪽에 위치하는 것이 좁은 노트북 화면의폭을 활용하는 측면에서 마음에 든다.

이 댓글을 비밀 댓글로

[리눅스/Vi] vi editor 문자열 치환(replace) 방법

by Blogger 하얀쿠아
2017. 6. 27. 01:09 소프트웨어 Note/Linux

개요

 리눅스 환경에서 코드를 작성하다 보면, 종종 vi editor 혹은 vim editor를 사용해서 코드의 특정 단어를 다른 단어로 교체(replace) 해야 하는 상황이 종종 있다. 

즉, 특정 문자열을 치환해야 하는 경우이다. 


예를들면, 현재 소스코드 파일에서 'apple_result' 이라는 변수를 모두 'melon_result' 라는 변수로 바꾸어야 하는 상황 같은 것 말이다. 


상황에 따라 아래와 같은 몇가지 방법이 있다.

우선 ex모드로 진입해야 한다.


vi / vim 단축키 모음



1. 현재 문서를 편집중인 '편집모드'라면, 키보드의 ESC 키를 눌러 편집모드에서 명령모드로 나온다.

2. 콜론(:)을 눌러 ex모드로 진입한다.

3. ex모드에서 아래와 같은 방법들 중, 자신의 상황에 맞는 방법을 선택해 수행하면 된다.


혹시, vi editor, vim editor의 모드(mode) 별 전환이 잘 이해 안된다면 아래 그림을 유심히 보시라.


Vim에서 각각의 모드 간 전환





기본 치환 방법


:%s/foo/bar


모든 foo라는 문자열을 'bar'로 한꺼번에 치환한다.

기본 틀은 아래와 같다.


:%s/[원본단어]/[바꿀단어]


기본 틀에 옵션을 주면, 좀더 활용이 편리한 경우가 있다.


:%s/[원본단어]/[바꿀단어]/[옵션]


아래에서 소개하는 방법들은 그 옵션별로, 어떤 동작을 하는지를 설명한다.




대소문자 구분없이 치환 방법


:%s/foo/bar/i


foo라는 문자열 뿐만 아니라, Foo, FOo, FOO, fOo, fOO, foO, FoO 등과 같은 문자열을 'bar' 라는 문자열로 한꺼번에 치환한다.



전역 치환 방법


:%s/foo/bar/g


vi의 기본적인 치환 방법을 실행하게 되면, 하나의 줄에서 가장 첫번째로 등장하는 단어만 치환한다.

예를 들어 'foofoofoofoofoofoofoofoo' 라는 문장이 있다고 가정하자.

:%s/foo/bar 를 실행하면 결과는 'barfoofoofoofoofoofoofoo' 와 같이 된다.


만약 원하는 것이, 'barbarbarbarbarbarbarbar' 와 같이 모든 'foo'가 전부 'bar'로 바뀌는 것이었다면, 지금 소개하는 '전역 치환 방법'을 적용하면 된다.




interactive모드로(바꿀까요? 물어보도록) 치환 방법


:%s/foo/bar/c


위 명령에서 마지막의 'c'는 foo를 bar로 바꾸어도 좋은지 물어보도록 하는 옵션이다. vi가 바꾸려고 하는 foo에 포커스를 맞춰주기 때문에, 개발자가 직접 눈으로 보고 선택적으로 변경을 할 수 있기에 더 안전하다.


너 'bar'로 바꿀거니?


이와 같이 바꿀 단어를 만나게 되면, 사용자에게 물어본다. 

y: 현재 focus 된 'foo'를 'bar'로 바꾸고 다음 'foo'로 건너뛰어 focus를 맞춘다.

n: 현재 focus 된 'foo'를 'bar'로 바꾸지 않고 다음 'foo'로 건너뛰어 focus를 맞춘다.

a: 더이상 묻지 않고, 모든 'foo'를 'bar'로 바꾼다.

q: 바꾸는 것을 그만 둔다.

l : 현재 focus된 'foo'를 'bar'로 바꾸고, 더이상 바꾸기를 하지 않고 그만둔다.


옵션을 혼용한 치환 방법

:%s/foo/bar/gic


만약, 전역 치환방법과 interactive모드로의 치환, 대소문자 무시한 치환을 모두 적용하고 싶다면?

지금 소개하는 방법과 같이 옵션을 동시에 사용할 수 있다.



응용1. 경로 치환 방법

만약 어떤 소스코드에 '/etc/file.txt' 라는게 있다고 해보자.

그런데 이걸 '/opt/usr/data/file.txt' 라는 문자열로 바꿔야 한다면?


:%s/\/etc\/file.txt/\/opt\/user\/data\/file.txt/g


슬래쉬 '/' 문자는 특수 문자이다.

이와 같이 특수 문자앞에 필수로 붙여야하는 '\' 를 활용하면 된다.


응용2. 개행문자(줄바꿈 문자)를 모두 없애기

파일의 모든 줄바꿈 문자를 없애야 하는 상황이라면?

아래와 같은 방법을 적용할 수 있다.


:%s/\n//g


'\n' 라는 개행문자를 '' 공백문자로 전역치환 하는 방법이다.



응용3. 정규표현식을 이용한 단어의 선택적 치환 방법

vim의 치환 명령은 '정규표현식' 이란 것을 잘 다루게 되면 그 가치가 배가 된다.

이 부분에 대해서는, 괜찮은 사용 예를 곧 소개할 예정이다.





vi editor 관련글

2012/04/18 - [소프트웨어 Note/Linux] - [리눅스/Vi]Vim, Vi, GVim 에서 '작업 취소(Undo)' / '다시 하기(Redo)' 방법


이 댓글을 비밀 댓글로

[우분투] Ubuntu 16.04 삼바(Samba) 설치 및 사용하기

by Blogger 하얀쿠아
2017. 6. 11. 08:00 소프트웨어 Note/Linux

윈도우 PC와 리눅스 PC 두대를 사용해서 개발등을 하다 보면, 두 PC간에 파일을 빈번하게 이동할 일이 발생한다.

이럴때 선택할 수 있는 방법은 여러가지가 될 수 있다.


우선 USB메모리나, 외장 하드디스크와 같은 저장장치를 이용할 수도 있다.

혹은 이메일이나 메신저의 파일전송 기능, 혹은 인터넷 게시판에 업로드 하는 방법 등으로 전달할 수도 있다.

좀더 우아한 방법으로는 one drive나 google drive 혹은 dropbox와 같은 클라우드 저장소를 활용할 수 도 있다. 


그러나 이 방법도 한번 고려해 보자.

'Samba' 라는 프로그램을 활용해서 우분투의 디렉토리를 공유 디렉토리로 만들고, 윈도우에서 접근 할 수 있는 방법이다.










Samba 설치하기


우분투 shell에서 apt 커맨드로 간단히 설치할 수 있다.


$ sudo apt install samba


16.04 우분투에서 실제로 내가 설치했던 방법이다. 

혹은 아래와 같이 기존의 방법 이용 해도 된다.


$ sudo apt-get install samba 



Samba 계정 추가

아래 명령어를 통해 사용하려는 계정을 간단히 계정을 추가할 수 있다.

명령어를 실행시키면 곧이어 사용할 비밀번호를 두번 묻고, 모두 입력하면 계정 추가 과정이 완료된다.


나는 아래와 같이 'Jeon' 을 계정명으로 사용했다.


$ sudo smbpasswd -a [계정명]


eg. $ sudo smbpasswd -a Jeon


smbpasswd는 다양한 기능을 가지고 있으니, 궁금하다면 --help 옵션으로 자세히 살펴보자.




Samba 설정 변경 및 적용

위에서 추가한 계정명을 기억하자.

그 내용으로 /etc/samba/smb.conf 파일을 편집해야 한다.

우선, 파일을 연다.


$ sudo vi /etc/samba/smb.conf


그리고, 가장 아래로 내려간 후, 아래를 참고해서 본인에 해당하는 내용을 추가한다.



[Jeon] 부분은 본인이 smbpasswd로 추가한 계정명으로 입력한다.

comment는 이 계정에 대해 간략한 설명을 입력한다.

path는 공유하려는 디렉토리의 경로이다. 절대경로를 입력한다. 나는 /home/jeon와 그 아래의 모든 디렉토리를 공유하고자 한다.

valid users는 이 공유 디렉토리에 연결하려는 사용자이름이다. 

삼바에 접근하는 쪽(윈도우 쪽) 에서 파일 쓰기를 허용할 지를 결정하는 옵션이다. (yes/no) 를 입력한다.

create mask와 directory mask는 그대로 따라 입력하면 크게 무리가 없을 것이다.


변경한 smb.conf를 적용하기 위해, 삼바 데몬 프로세스 (smbd)를 재시작 시킨다.


$ sudo /etc/init.d/smbd restart



윈도우에서 리눅스의 저장장치 접근

지금부터 윈도우에서 리눅스 파일을 읽고, 수정하고, 지울 수 있다.

즉, 리눅스의 모든 파일을 윈도우에서 공유받게 되는 것이다.


윈도우 탐색기를 열고, 주소표시줄에 아래와 같이 리눅스 PC의 IP주소를 입력하고 엔터를 누른다.




그러면, smb.conf에서 설정한 path의 내용이 보이게 된다.





이 댓글을 비밀 댓글로
    • 리눅스
    • 2018.05.16 15:38
    마지막 \\아이피 입력 부분에서 엑세스 거부가 뜨는데 왜 이러는걸까요
    • 계정설정이 잘못되었을 것 같습니다. 현재 linux계정과 samba 계정 설정을 다시 한번 살펴보시는게 도움될것 같아요.
    • 우분투
    • 2018.06.05 18:16
    접근하는 디폴트 포트 번호가 어떻게 될까요?
    포트 포워딩해서 외부망에서 접근을 해야해서요
    • ganggang
    • 2018.07.07 15:14
    감사합니다!! 라즈베리 파이에 똑같이 따라해 성공했네요!
    그런데 netstat -tulpn | grep smbd 하니까 139, 145번 포트를 사용하는데 맞나요?
    • 쌈바
    • 2018.09.27 09:41
    계정추가하면 Failed to add entry for user 이렇게 뜨는데 뭐가 잘못된걸까요 ㅠㅠ
    • sudo smbpasswd -a [계정명]
      이 명령사용할 때, 말씀하신 에러가 발생하는 경우는, 현재 사용중인 linux에 존재하지 않는 계정명인 경우라고 합니다.
  1. 보고 잘따라했습니다 감사합니다
    • 2019.05.31 07:38
    config 뭐 대단하다고 복붙이 없어~~

[우분투] Ubuntu 16.04 화면 캡쳐 방법

by Blogger 하얀쿠아
2017. 6. 10. 16:06 소프트웨어 Note/Linux


우분투를 사용하면서 화면을 캡쳐해야 할 경우가 종종 있다.

우분투 16.04 사용하기 시작한지 2일째인데, 의외로 유용한 기능이 많은 것 같다.

그것 중 하나가, 다양한 방식의 화면 캡쳐 기능을 제공하는 것이다.


참고로 우분투 16.04 에서는 화면 캡쳐를 스크린샷(Screenshot) 이라는 용어로 표현하고 있었다.


우분투는 다음과 같이 총 6가지의 스크린샷 찍기 방법을 제공하고 있다.


스크린샷 찍기 / 활성화 된 창의 스크린샷 찍기 / 영역의 스크린샷 찍기

클립보드로 스크린샷 복사 / 활성화 된 창의 스크린샷을 클립보드로 복사 / 영역의 스크린샷을 클립보드로 복사


각 방법에 대해 단축키를 살펴보자.

당신이 설정을 변경하지 않았다면, 이 글에서 소개하는 기본 단축키가 동작할 것 이다.



스크린샷 찍기 

단축키 : Print


기본적인 스크린샷 찍기 방법이다.

전체 화면이 스크린샷으로 찍히며, 파일로 저장하기 위한 창이 뜬다.



활성화 된 창의 스크린샷 찍기 

단축키 : Alt + Print


현재 마우스로 한번 클릭해서, 맨앞에 떠있는 활성화 상태의 창 1개만 스크린샷을 찍는다.

파일로 저장하기 위한 창이 뜬다.


영역의 스크린샷 찍기 

단축키 : Shift + Print


위 단축키를 누르면 마우스가 '십자' 모양으로 변경되면서 영역을 지정할 수 있는 상태가 된다.

영역을 지정하고 나면, 파일로 저장하기 위한 창이 뜬다.


클립보드로 스크린샷 복사 

단축키 : Ctrl + Print


전체 화면을 스크린샷으로 찍는다.

파일로 저장하기 위한 창은 뜨지 않는다.

대신, 클립보드로 방금 찍은 스크린샷이 복사되어, 그림판이나 Slide편집 툴 등에 Ctrl+V 로 붙여 넣을 수 있다.


활성화 된 창의 스크린샷을 클립보드로 복사 

단축키 : Ctrl + Alt + Print


현재 마우스로 한번 클릭해서, 맨앞에 떠있는 활성화 상태의 창 1개만 스크린샷을 찍는다.

파일로 저장하기 위한 창이 뜨지는 않는다.

대신, 클립보드로 방금 찍은 스크린샷이 복사되어, 그림판이나 Slide편집 툴 등에 Ctrl+V 로 붙여 넣을 수 있다.


영역의 스크린샷을 클립보드로 복사 

단축키 : Shift + Ctrl + Print


위 단축키를 누르면 마우스가 '십자' 모양으로 변경되면서 영역을 지정할 수 있는 상태가 된다.

영역을 지정하고 나면, 파일로 저장하기 위한 창은 뜨지 않는다.

대신, 클립보드로 방금 찍은 스크린샷이 복사되어, 그림판이나 Slide편집 툴 등에 Ctrl+V 로 붙여 넣을 수 있다.



스크린샷 단축키를 변경하는 방법

원한다면 소개한 기본단축키를 입맛에 따라 변경하는 방법도 있다.

먼저, 다음 경로를 따라 키보드의 설정 창을 연다.


System Settings → Keyboard




키보드를 선택하고 열어보면, 아래와 같이 단축키를 설정할 수 있는 'Shortcuts' 탭이 있다.

선택 후 좌측 아래의 여러 항목들 중, 'Screenshots' 항목을 선택하면, 오른쪽에 Screenshot을 찍기 위한 단축키들이 기능별로 나열 된다.

단축키 부분을 마우스로 선택 후, 변경할 단축키를 입력하면 변경이 가능하다.






Print키는 어디에 있지?

보통 우분투를 사용할 정도의 사람이라면 이걸 모르지는 않겠지만.

혹시나 싶어서.

위 설명중, 단축키의 'Print' 키가 무엇인지 모른다면 아래 사진을 한번 보자.

Print Screen 키를 말하는 것이다.



일반 키보드의 'Print Screen' 키


음... 키캡 사이사이에 먼지가 보이지만 애써 외면하고 붉은 사각형만 보기로 하자.


현재 사용중인 10 key-less 일반키보드이다. (도쿄 출장 당시에 아키하바라 전자상가에 들러 구입했던 FILCO 청축 키보드이다.)

위와 같이 보통, F12 키 옆에 print screen 키가 존재한다.



노트북 키보드의 'Print Screen' 키


노트북은, 작은 키보드 면적으로 인해, key의 인쇄도 'prt sc' 와 같이 축약되어 있고, 다른 키와 중첩으로 배치되어 있어서, 'fn' 키와 같이 눌러야 동작하는 경우도 있다.

이 댓글을 비밀 댓글로

[우분투] Ubuntu 16.04 한글키보드 한글입력 방법

by Blogger 하얀쿠아
2017. 6. 10. 08:30 소프트웨어 Note/Linux

Prologue

2009년부터 사용하던 오래된 노트북 컴팩 CQ40.

그동안 약 4년정도를 윈도우7을 설치해서 사용해오다가, 포맷을 하고 우분투 16.04 를 설치해서 사용하기로 했다.

설치를 마친 후, 한글 입력을 하려니 왠걸. 되질 않는다.

기억을 더듬어보자.

회사 업무PC에 우분투 12.04를 처음 설치 한 후, 한글 입력이 곧바로는 되지 않았었다.

몇가지 설정을 더 해주고, 별도의 Nabi라는 입력기를 설치해야만 한글 입력이 가능했던 것 같다.


본격 Ubuntu 16.04 한글 입력 가능하게 만들기

한글키보드로 한글 입력을 할 수 있게 만드는 과정은 간단하다.


1. 입력기 설치( IBus 설치 )

2. 몇가지 설정


먼저, 입력기 설치다. IBus라는 입력기를 설치할 것이다. 

IBus hangul 패치버전 설치를 위한 PPA(Personal Package Archive)를 아래와 같이 추가한다.

$ sudo add-apt-repository ppa:createsc/3beol


PPA를 추가했으니 실제로 IBus와 IBus-hnagul을 설치 한다.

$ sudo apt-get update

$ sudo apt-get install ibus ibus-hangul


이제, 몇가지 설정이다.

아래그림을 참조하자. System Settings 메뉴에서 두가지만 찾으면 된다.

첫번째. Language Support.

'System Settings' → Language Support → 진입초기에 install을 요구할 경우 진행한다.

'Language for menus and windows'에서 아래로 스크롤 해보면 한국어가 보일 것이다. 만약 없다면, Install/Remove Languages 를 선택하여 한국어 혹은 Korean을 선택한다.


두번째. Text entry.

'System Settings' → Text Entry → 좌측 하단의 '+' 버튼 → Korean (Hangul) (IBus) 선택하여 추가한다.

한글언어 인 경우는 아래 사진처럼 '한국어 (Hangul)(IBus)' 라고 표시된다.


여기까지만 하면, 한/영 전환이 가능해지고, 한글입력이 가능해진다.

한영전환 키는 'Text Entry' 메뉴의 'Super+Space' 키가 기본값이다.


우분투에서 Super키라 하면, 윈도우 키를 말한다.

한영 전환을 해서 입력해보면, 아래와 같이 system tray에 입력기 아이콘이 바뀌면서 표시된다.

태극문양이 IBus hangul의 아이콘이다.



이 댓글을 비밀 댓글로
    • 즐겁게살자
    • 2017.07.16 17:02
    덕분에 드디어 깔았네요.
    감사합니다. ^ㅡ^*
    • mshan0209
    • 2017.11.01 02:39
    감사합니다.
    • ㅅㅅㅅ
    • 2017.11.07 21:51
    감사합니다 도움받고 가요
    • notebook
    • 2019.02.01 11:49
    친절하고 상세하게 써있네요. 덕분에 잘 설치했습니다 .감사합니다 :)
    • v
    • 2019.12.01 22:59
    감사합니다!!
    • 박철호
    • 2019.12.10 04:13
    저도 드디어 성공했어요.
    감사합니다