cifs 에러 (CIFS VFS SessSetup = -13)

리눅스/OS 일반|2019. 11. 1. 17:18
반응형

cifs 마운트가 되지 않고 시스템 로그에 아래와 같은 로그가 남는 다면

cifs 에러 (CIFS VFS SessSetup = -13)

 

이러한 옵션을 추가하여 마운트를 시도해 봅니다.

,sec=ntlmssp

 

예) # mount -t cifs -o username=sysdocu,password='12345678',sec=ntlmssp //192.168.10.2/sysdocu /data

 

 

반응형

댓글()

php 코드로 json 형태로 출력하기

프로그래밍/PHP|2019. 10. 30. 08:48
반응형

php 로 json 형태의 문자열을 echo 출력 했음에도 불구하고 json 인식이 되지 않는 경우는

php 소스 최상단에 아래 코드를 입력하도록 합니다.

이경우 html 코드가 (예 : <br>) 텍스트로 출력되어 버리니 필요 없는 태그는 미리 삭제 하도록 합니다.



1. 소스 코드 추가


<?

header('Content-Type: application/json');

...

?>



2. 출력 예시


{

    "status": "true",

    "message": "Data fetched successfully!",

    "data": [

    {

        "id": "1",

        "title": "제목",

        "body": "내용을 씁니다.",

    },

    {

        "id": "2",

        "title": "인사말",

        "body": "안녕하세요. 반갑습니다.",

    }

    ]

}


반응형

댓글()

커스텀 스피너 (Custom Spinner)

프로그래밍/Android (Java)|2019. 10. 29. 15:19
반응형

1. 레이아웃 추가


<Spinner

    android:id="@+id/simpleSpinner"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:layout_centerHorizontal="true" /> 



2. custom_spinner_items.xml 레이아웃 생성


<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="wrap_content"

    android:orientation="horizontal">


    <ImageView

        android:id="@+id/imageView"

        android:layout_width="50dp"

        android:layout_height="50dp"

        android:padding="5dp"

        android:src="@drawable/ic_launcher" />


    <TextView

        android:id="@+id/textView"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:layout_gravity="center"

        android:text="Demo"

        android:textColor="#000" />

</LinearLayout> 



3. 스피너 추가할 화면의 java 파일


public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener{



    String[] countryNames={"India","China","Australia","Portugle","America","New Zealand"};

    int flags[] = {R.drawable.india, R.drawable.china, R.drawable.australia, R.drawable.portugle, R.drawable.america, R.drawable.new_zealand};


    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);


        Spinner spin = (Spinner) findViewById(R.id.simpleSpinner);

        spin.setOnItemSelectedListener(this);


        CustomAdapter customAdapter=new CustomAdapter(getApplicationContext(),flags,countryNames);

        spin.setAdapter(customAdapter);

    }



    @Override

    public void onItemSelected(AdapterView<?> arg0, View arg1, int position,long id) {

        Toast.makeText(getApplicationContext(), countryNames[position], Toast.LENGTH_LONG).show();

    }


    @Override

    public void onNothingSelected(AdapterView<?> arg0) {

        // TODO Auto-generated method stub

    }

} 



4. CustomAdapter.java 생성


import android.content.Context;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.ImageView;

import android.widget.TextView;


public class CustomAdapter extends BaseAdapter {

    Context context;

    int flags[];

    String[] countryNames;

    LayoutInflater inflter;


    public CustomAdapter(Context applicationContext, int[] flags, String[] countryNames) {

        this.context = applicationContext;

        this.flags = flags;

        this.countryNames = countryNames;

        inflter = (LayoutInflater.from(applicationContext));

    }


    @Override

    public int getCount() {

        return flags.length;

    }


    @Override

    public Object getItem(int i) {

        return null;

    }


    @Override

    public long getItemId(int i) {

        return 0;

    }


    @Override

    public View getView(int i, View view, ViewGroup viewGroup) {

        view = inflter.inflate(R.layout.custom_spinner_items, null);

        ImageView icon = (ImageView) view.findViewById(R.id.imageView);

        TextView names = (TextView) view.findViewById(R.id.textView);

        icon.setImageResource(flags[i]);

        names.setText(countryNames[i]);

        return view;

    }

} 



[출처] https://abhiandroid.com/ui/custom-spinner-examples.html

반응형

댓글()

ImageView 모서리 둥글게 하기

프로그래밍/Android (Java)|2019. 10. 29. 14:30
반응형

이미지뷰 모서리를 둥글게 하는 방법으러 java 에서 처리하는 방법도 있지만 간단히 레이아웃에서 처리하는 방법도 있어 방법을 설명합니다.



1. app 단의 build.gradle 수정


implementation 'androidx.cardview:cardview:1.0.0'    // androidx 의 경우

또는

implementation 'com.android.support:cardview-v7:28.0.0' 


수정시 우측 상단에 뜨는 Sync 버튼 클릭



2. layout 수정


ImageView 를 감싸는 CardView 를 만들어 줍니다.


<androidx.cardview.widget.CardView    // androidx 의 경우

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        app:cardCornerRadius="5dp">


    <ImageView

        android:id="@+id/iv"

        android:src="@drawable/sysdocu_img"

        android:layout_width="50dp"

        android:layout_height="50dp"

        android:scaleType="fitXY"/>


</androidx.cardview.widget.CardView> 


* androidx 가 아닌 경우 아래 것으로 사용합니다.

<android.support.v7.widget.CardView

    ....>

    <ImageView

        ..../>

</android.support.v7.widget.CardView>



반응형

댓글()

Ubuntu 19.04 에서 /etc/rc.local 활용하기

리눅스/OS 일반|2019. 10. 29. 13:13
반응형

처음 OS 를 설치할 경우 /etc/rc.local 이 존재하지 않아 당혹스러운 때가 있습니다.

Ubuntu 19.04 에서는 수동으로 몇 가지 설정을 해주어야 부팅시 필요한 명령 실행 가능합니다.

 

1. 구동 파일 생성

구동 파일은 쉘스크립트 형식으로 생성하면 됩니다.

처음에 없는 파일이니 vi 에디터로 생성해줍니다.

# vi /etc/rc.local

#!/bin/bash

php /home/sysdocu/public_html/test.php &

exit 0 

 

2. 서비스 파일 수정

아래 파일을 열어 필요한 설정을 추가해 줍니다.

# vi /lib/systemd/system/rc-local.service

...

[Install]

WantedBy=multi-user.target 

 

# systemctl daemon-reload

 

3. 서비스 구동 설정

서버 부팅시 자동으로 구동 되도록 합니다.

# systemctl enable rc-local    // 부팅시 구동

# systemctl start rc-local        // 지금 구동

 

반응형

댓글()

bind 9 설치 (Ubuntu 19.04)

리눅스/DNS|2019. 10. 29. 10:31
반응형

우분투 19.04 버전에서 네임서버를 운영하기 위한 절차 입니다.

아래 절차만 순차적으로 따라하셔도 구축이 되며,

사용하고 계신 A, MX, CNAME 레코드 등에 대해서는 알맞게 레코드를 추가하여 설정하시면 됩니다.



1. 설치


root@sysdocu:~# apt -y install bind9



2. 도메인 설정


파일을 열어 아래 내용을 추가 합니다.


root@sysdocu:~# vi /etc/bind/named.conf.local


zone "sysdocu.com" IN {

  type master;

  file "sysdocu.com.zone";

};



새로운 zone 파일을 생성하여 내용을 입력합니다.


root@sysdocu:~# vi /var/cache/bind/sysdocu.com.zone


$TTL 600

@       IN      SOA     ns1.sysdocu.com. root (

                                        2019102901  ; serial

                                        1D        ; refresh

                                        1H        ; retry

                                        1W        ; expire

                                        3H )      ; minimum

@       IN      NS      ns1.sysdocu.com.

@       IN      NS      ns2.sysdocu.com.

@       IN      MX      10 mail.sysdocu.com.

@       IN      TXT     "v=spf1 ip4:192.168.10.2 ~all"

ns1     IN      A       192.168.10.2

ns2     IN      A       192.168.10.2

@       IN      A       192.168.10.2

www     IN      A       192.168.10.2

mail    IN      A       192.168.10.2

*       IN      A       192.168.10.2



설정한 내용을 적용합니다.


root@sysdocu:~# systemctl enable bind9

root@sysdocu:~# systemctl restart bind9



3. 질의 테스트


1) 로컬에서 질의 확인


root@sysdocu:~# nslookup sysdocu.com localhost

Server: localhost

Address: ::1#53


Name: sysdocu.com

Address: 192.168.10.2



2) 외부에서 질의 확인


[root@localhost ~]# nslookup sysdocu.com 192.168.10.2

Server: 192.168.10.2

Address: 192.168.10.2#53


Name: sysdocu.com

Address: 192.168.10.2



4. 참고

- 네임서버로 사용하기 위해 방화벽에서 UDP 53 번 포트 허용하는 것은 필수 입니다.

- 도메인 구입처에서 호스트 및 네임서버를 변경하면 시간이 한참 지나 적용이 될 수 있으므로

  이점 참고하여 운영하시기 바랍니다.


반응형

댓글()

Xwindow + VNC server 설치 (Ubuntu 19.04)

리눅스/OS 일반|2019. 10. 24. 15:00
반응형

Ubuntu 19.04 를 텍스트 환경으로 설치하였다면 나중에 Xwindow 가 필요해졌을때 아래와 같이 설치가 가능합니다.

 

 

1. 설치

 

OS 환경을 최신 환경으로 업데이트 합니다.

 

root@sysdocu:~# apt -y update

root@sysdocu:~# apt -y upgrade

 

Xwindow 를 목적에 맞게 설치 합니다.

Desktop 처럼 사용하기 위해 전체 설치를 할 수도 있으나 저는 Firefox 만 사용할 것이므로 아래 최소 설치로 진행 했습니다.

 

root@sysdocu:~# apt -y install ubuntu-desktop    // 전체 설치 (오피스 등)

또는

root@sysdocu:~# apt -y install --no-install-recommends ubuntu-desktop    // 최소 프로그램 설치

 

gnome 데스크탑과 필요한 브라우저 firefox 를 설치합니다.

전체 설치를 선택한 경우 firefox 는 생략해도 됩니다.

 

root@sysdocu:~# apt -y install ubuntu-gnome-desktop firefox

 

부팅 레벨을 설정합니다.

부팅 레벨은 서버 부팅시 OS 환경을 텍스트 모드인지 그래픽 모드인지 사용자가 원하는 환경으로 부팅되게 해줍니다.

현재 런레벨을 명령어로 확인하고 GUI 환경으로 부팅하기 위한 명령입니다.

 

root@sysdocu:~systemctl get-default

 

부팅시 로컬에서 GUI 환경으로 사용하고 싶은 경우 런레벨을 아래와 같이 변경합니다.

 

root@sysdocu:~systemctl set-default graphical.target

 

이 밖에 주로 사용하는 런레벨은 아래와 같습니다.

 

* 참고

[Run Level] [Target]

1                      rescue.target    // root 패스워드 없이 시스템 운영 가능 (복구 모드)

2                      multi-user.target    // 텍스트 모드

5                      graphical.target    // 그래픽 모드

 

 

2. VNC 서버 설정

 

Xwindow 를 설치했다면 서버에 GUI 환경으로 접속하기 위해 VNC server 를 설치 합니다.

 

root@sysdocu:~apt -y install tightvncserver

 

접속 비밀번호를 설정 합니다.

 

root@sysdocu:~# vncserver

 

You will require a password to access your desktops.

 

Password: 

Warning: password truncated to the length of 8.

Verify:   

Would you like to enter a view-only password (y/n)? 

 

New 'X' desktop is sysdocu.tistory.com:1

 

Creating default startup script /root/.vnc/xstartup

Starting applications specified in /root/.vnc/xstartup

Log file is /root/.vnc/sysdocu.tistory.com:1.log

 
설치 후 자동으로 데몬이 가동 되는데, 새로운 설정 적용을 위해 데몬을 잠시 중지 시킵니다.
 
root@sysdocu:~# netstat -nltp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:5901            0.0.0.0:*               LISTEN      13134/Xtightvnc     
tcp        0      0 0.0.0.0:6001            0.0.0.0:*               LISTEN      13134/Xtightvnc     
tcp        0      0 0.0.0.0:22            0.0.0.0:*               LISTEN      12434/sshd          
tcp6       0      0 :::22                 :::*                    LISTEN      12434/sshd
 
root@sysdocu:~# vncserver -kill :1
Killing Xtightvnc process ID 13134
 
root@sysdocu:~# netstat -nltp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22            0.0.0.0:*               LISTEN      12434/sshd          
tcp6       0      0 :::22                 :::*                    LISTEN      12434/sshd         
 
VNC 설정 파일을 열고 아래와 같이 옵션을 추가 해줍니다.
 
root@sysdocu:~# vi ~/.vnc/xstartup
 
gnome-panel &
gnome-settings-daemon &
metacity &
nautilus &
gnome-terminal & 

 

VNC server 를 다시 가동해줍니다.
 
root@sysdocu:~# vncserver
 
 

3. 원격 접속

GUI 환경으로 서버를 운영하기 위해 VNC Client 프로그램을 통해 서버에 접속합니다.

접속시 사용하는 계정은 '2. VNC 서버 설정' 항목에서 설정한 계정 정보로 로그인하면 됩니다.

 

커맨드 라인에서 브라우저를 구동하고자 할때는 아래와 같이 사용하면 됩니다.

 

파이어폭스

root@sysdocu:~# firefox "http://sysdocu.tistory.com"

 

크롬을 설치하고 구동하려는 경우

root@sysdocu:~# /usr/bin/google-chrome "http://sysdocu.tistory.com"

 

 

[ 작업 표시줄이 안뜨는 경우 ]

 

아래 작업을 추가로 진행해 줍니다.

 

root@sysdocu:~# sudo apt-get install ubuntu-desktop

root@sysdocu:~# sudo apt-get install unity-control-center

root@sysdocu:~# sudo apt-get install unity-control-center-signon

root@sysdocu:~# sudo apt-get install gnome-control-center-unity

root@sysdocu:~# sudo apt-get install gnome-panel

root@sysdocu:~# reboot

 

 

반응형

댓글()

CentOS 7 yum 미러 서버 추가

리눅스/OS 일반|2019. 10. 17. 17:29
반응형

CentOS 7 사용중 패키지 설치 및 업데이트를 위해 사용하는 yum 명령이

리포지토리 사이트 접속 불가로 인해 수행되지 않는다면 아래와 같이 daum 사이트의 리포지토리를

추가하여 명령을 재구동 해봅니다.


[root@sysdocu ~]# cd /etc/yum.repos.d


[root@sysdocu ~]# vi Daum.repo


[base]

name=CentOS-$releasever - Base

baseurl=http://ftp.daum.net/centos/7/os/$basearch/

gpgcheck=1

gpgkey=http://ftp.daum.net/centos/RPM-GPG-KEY-CentOS-7


[updates]

name=CentOS-$releasever - Updates

baseurl=http://ftp.daum.net/centos/7/updates/$basearch/

gpgcheck=1

gpgkey=http://ftp.daum.net/centos/RPM-GPG-KEY-CentOS-7


[extras]

name=CentOS-$releasever - Extras

baseurl=http://ftp.daum.net/centos/7/extras/$basearch/

gpgcheck=1

gpgkey=http://ftp.daum.net/centos/RPM-GPG-KEY-CentOS-7


[centosplus]

name=CentOS-$releasever - Plus

baseurl=http://ftp.daum.net/centos/7/centosplus/$basearch/

gpgcheck=1

gpgkey=http://ftp.daum.net/centos/RPM-GPG-KEY-CentOS-7


[root@sysdocu ~]# yum clean all



반응형

댓글()

could not get lock /var/lib/dpkg/lock open 11: resource temporarily unavailable

리눅스/OS 일반|2019. 10. 17. 16:11
반응형

우분투에서 패키지 설치 시 아래와 같은 메세지를 만났다면


[root@sysdocu ~]# apt -y install wget

E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)

E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?


dpkg 프로세스가 종료되기까지 조금 기다렸다가 다시 명령을 수행해보던가

아래와 같은 절차대로 잠금 관련 파일을 삭제 후 명령을 수행하면 됩니다.


[root@sysdocu ~]# rm /var/lib/apt/lists/lock

[root@sysdocu ~]# rm /var/cache/apt/archives/lock

[root@sysdocu ~]# rm /var/lib/dpkg/lock

[root@sysdocu ~]# dpkg --configure -a



반응형

댓글()

Ubuntu 19.04 에서 systemd-resolved 비활성화 하기

리눅스/OS 일반|2019. 10. 2. 10:54
반응형

root@sysdocu:~# systemctl disable systemd-resolved


root@sysdocu:~# systemctl stop systemd-resolved




반응형

댓글()

웹 브라우저 링크로 앱 실행 방법 (유사 딥링크, 동적링크)

프로그래밍/Android (Java)|2019. 9. 30. 11:18
반응형

안드로이드 자체 브라우저로 특정 앱을 실행 하는 것이 가능하다.

이것은 안드로이드 OS가 가진 intent의 특징으로 가능 한것 같다.

Intent 의 자세한 내용은 안드로이드 API Guide에 있는  Intents and Intent Filters 를 보면 알수 있다.


1. 먼저 실행 하고자 하는 앱의 AndroidManifest.xml 파일에서 실행하고자 하는 Activity아래에 Intent-filter를 선언해준다.


<activity android:name="SearchActionActivity">
             <intent-filter>  
                <action android:name="android.intent.action.VIEW"/>  
                <category android:name="android.intent.category.DEFAULT"/>  
                <category android:name="android.intent.category.BROWSABLE"/>  
                <data android:scheme="callMyApp" android:host="search"/>  
            </intent-filter>
</activity>


2. 웹 브라우저 상에서 링크 설정 방법
- 웹에서 특정 URL형태로 설정을 해줘야 해당 앱이 호출되어 실행 되어 진다.

<a href="callMyApp://search"> 나의 앱 검색 실행 </a>

위와같이 웹페이지에서 링크를 설정해 두면 해당 앱이 설치되어 있으면 해당 SearchActionActivity가 바로 실행 되어지는 걸 알수 있다.

따라서, 다른 액션의 Activity를 실행하고 싶다면 다른 Activity에 intent-filter만 추가해주면 가능하다.

<activity android:name="TakePhotoActionActivity">
             <intent-filter>  
                <action android:name="android.intent.action.VIEW"/>  
                <category android:name="android.intent.category.DEFAULT"/>  
                <category android:name="android.intent.category.BROWSABLE"/>  
                <data android:scheme="callMyApp" android:host="takePhoto"/>  
            </intent-filter>
</activity>

웹에서 호출 방법은

<a href="callMyApp://takePhoto"> 나의 앱 사진 찍기 실행 </a>


3. 필요에 따라서 앱이 설치 되어 있으면 실행하고 설치 되어 있지 않으면 구글 플레이 마켓으로 이동 하고 싶다고 한다면 intent 전달 방식으로 호출 하면 된다.(Android Only)

기본 형식은 아래와 같다.

Intent://[host명]?파라미터=파리미터값
#Intent;scheme=callMyApp;action=android.intent.action.VIEW;category=android.intent.category.BROWSABLE;package=com.test.myapp;end


간단한 호출 예
<a href="Intent://takePhoto#Intent;scheme=callMyApp;package=com.test.myapp;end">
나의 앱 사진 찍기 실행 </a>




3. 앱에서 파라메터 값 받아서 처리 하기
- 앱에서 호출되어진 Activity 에서 Intent를 통해서 들어온 데이터에서 파라메터 값을 받아서 처리 할수도 있다.

Uri uriData = getIntent().getData();
String photoNumber = uriData.getQueryParameter("photoNumber ");

웹에서 호출
<a href="callMyApp://takePhoto?photoNumber=1"> 나의 앱 1번 사진 보기 </a>


이상으로 웹에서 링크로 안드로이드 앱의 호출을 알아보았습니다.

이것이 되는 것은 Android OS상에서 기본적으로 Intent 호출 방식을 지원하기 때문에 가능하지 않나 생각됩니다.

 



참고 사이트
http://developer.android.com/guide/components/intents-filters.html
http://developer.naver.com/wiki/pages/UrlScheme

 

원본글 URL

 http://gwons.blogspot.kr/2014/11/android.html



출처: https://lkmstar.tistory.com/4 [천지파멸의 이야기]

반응형

댓글()